2017-12-15 4 views
1

는 다음 클래스 상상 :로컬 인스턴스로 메소드를 테스트하는 방법은 무엇입니까?

class ClassToBeTested{ 
    private IClassA a; 
    private IClassB b; 

    public ClassToBeTested(IclassA a, IClassB b) 
    { 
     this.a = a; 
     this.b = b; 
    } 

    public void MethodToBeTested() 
    { 
     //... 
     var c = new ClassC(a, b); 
     c.doSomeThing(); 
     //... 
    } 
} 

을 그리고 MethodToBeTested에 대한 몇 가지 단위 테스트를 수행합니다. 그러나 나는 의존성 주입을하지 않고 moq ClassC 객체로가는 길을 찾을 수 없다. 메서드 시그니처를 변경하고 ClassC을 매개 변수로 전달하고 싶지 않습니다.

단위 테스트 방법은이 방법이 있습니까?

+0

'ClassC'를 반환하는 가상 메소드를 만들 수 있습니다. [테스트 할 수없는 테스팅] (https://contrivedexample.com/2016/11/26/testing-the-un-testable/) – Crowcoder

+0

속성 주입을 할 수 있고 yout의'ClassC' 속성을 만들 수 있습니다. ClassToBeTested' –

+0

의존성 주입을 사용합니다.하지만 그렇게하고 싶지 않고 VS Enterprise에 액세스 할 수 있다면 가짜를 사용하고 ClassC와 그 멤버를 가짜로 사용할 수 있습니다. 이것은 사용중인 Type에 대한 소스 제어가 없을 때 편리합니다. 귀하의 경우에는 DI를 권하고 싶습니다. 테스트를하고있는 클래스가 밀접하게 결합되어 있기 때문에 쉽지 않은 경우 리팩토링을해야합니다. (테스트에서 디자인을 변경해야한다는 메시지가 나타납니다) – Igor

답변

1

ClassToBeTestedClassC을 삽입하거나 런타임에 생성하려면 어떤 종류의 팩토리라고 말하면라고 말하면됩니다. 그러면 공장을 대신 조롱 할 수 있습니다.

관련 문제