C # 보호 메서드 단위 테스트
저는 Java EE 세계에서 왔지만 지금은 .Net 프로젝트를 진행하고 있습니다. Java에서는 보호 된 메서드를 테스트하고 싶을 때 매우 쉬웠습니다. 동일한 패키지 이름의 테스트 클래스 만 있으면 충분했습니다.
C #과 비슷한 것이 있습니까? 보호 된 메서드를 단위 테스트하는 좋은 방법이 있습니까? 나는 단지 공개적인 방법만을 테스트해야한다고 말하는 프레임 워크와 사람들을 찾았다.
프레임 워크 없이도 가능해야합니다…
테스트 클래스에서 테스트중인 클래스를 상속 할 수 있습니다.
public class Test1 : SomeClass
{
Asert.AreEqual(1, SomeClass.ProtectedMethod());
}
또 다른 옵션은 internal
이러한 메서드를 사용한 다음을 사용 InternalsVisibleTo
하여 테스트 어셈블리가 이러한 메서드에 액세스 할 수 있도록하는 것입니다. 이것은 동일한 어셈블리의 다른 클래스에서 사용되는 메서드를 중지하지 않지만 테스트 어셈블리가 아닌 다른 어셈블리에서 액세스하는 것을 중지합니다.
이것은 많은 캡슐화와 보호 기능을 제공하지는 않지만 매우 간단하고 유용 할 수 있습니다.
AssemblyInfo.cs
내부 메서드를 포함하는 어셈블리에 추가
[assembly: InternalsVisibleTo("TestsAssembly")]
테스트 할 클래스를 상속하는 새 클래스에서 보호 된 메서드를 노출 할 수 있습니다.
public class ExposedClassToTest : ClassToTest
{
public bool ExposedProtectedMethod(int parameter)
{
return base.ProtectedMethod(parameter);
}
}
PrivateObject 클래스를 사용하여 모든 private / protected 메서드 / 필드에 액세스 할 수 있습니다.
PrivateObject는 단위 테스트를 위해 일반적으로 액세스 할 수없는 멤버를 호출 할 수있는 래퍼 인 Microsoft 단위 테스트 프레임 워크의 클래스입니다.
리플렉션을 사용하여 개인 및 보호 메서드를 호출 할 수 있습니다.
자세한 내용은 여기를 참조하십시오.
http://msdn.microsoft.com/en-us/library/66btctbe.aspx
받아 들인 대답이 가장 좋은 대답이지만 내 문제를 해결하지 못했습니다. 보호 된 클래스에서 파생 된 것은 다른 많은 것들로 내 테스트 클래스를 오염 시켰습니다. 결국 나는 테스트 할 로직을 공개 클래스로 추출하여 테스트하기로 결정했습니다. 확실히 이것은 모든 사람에게 작동하지 않으며 상당한 리팩토링이 필요할 수 있지만이 답변까지 스크롤하면 도움이 될 수 있습니다. :) 여기에 예가 있습니다.
이전 상황 :
protected class ProtectedClass{
protected void ProtectedMethod(){
//logic you wanted to test but can't :(
}
}
새로운 상황 :
protected class ProtectedClass{
private INewPublicClass _newPublicClass;
public ProtectedClass(INewPublicClass newPublicClass) {
_newPublicClass = newPublicClass;
}
protected void ProtectedMethod(){
//the logic you wanted to test has been moved to another class
_newPublicClass.DoStuff();
}
}
public class NewPublicClass : INewPublicClass
{
public void DoStuff() {
//this logic can be tested!
}
}
public class NewPublicClassTest
{
NewPublicClass _target;
public void DoStuff_WithoutInput_ShouldSucceed() {
//Arrange test and call the method with the logic you want to test
_target.DoStuff();
}
}
참조 URL : https://stackoverflow.com/questions/13416223/unit-testing-c-sharp-protected-methods
'Development Tip' 카테고리의 다른 글
Pylint의 파일 수준에서 "missing docstring"경고를 비활성화하려면 어떻게해야합니까? (0) | 2020.12.15 |
---|---|
Node.js를 사용하여 파일 시스템의 디렉토리 구조를 JSON으로 변환 (0) | 2020.12.15 |
Haskell에 암시 적 병렬성이없는 이유는 무엇입니까? (0) | 2020.12.15 |
LocationClient getLastLocation () 반환 null (0) | 2020.12.15 |
Android M에서 단일 요청으로 여러 권한을 확인하는 방법은 무엇입니까? (0) | 2020.12.15 |