그래서 통합 테스트를 수행하는 데 IOC 컨테이너를 어떻게 사용하는지 완전히 이해하지 못하고 있다고 생각합니다.통합 테스트와 함께 사용하기 위해 IOC 등록을 재정의하십시오.
: 실제 응용시 사용 (내가 여기 autofac를 사용하고) 내가 좋아하는 뭔가를 모듈을 생성 할 거라고에 대한 그래서public class EmailComposer : IComposer
{
public EmailComposer(IEmailFormatter formatter)
{
...
}
...
public string Write(string message)
{
...
return _formatter.Format(message);
}
}
OK :
의 나는 두 개의 클래스가 있다고 가정하자
protected override void Load(ContainerBuilder containerBuilder)
{
containerBuilder.RegisterType<HtmlEmailFormatter>().As<IEmailFormatter>();
}
완벽하게 잘 작동합니다.
단위 테스트의 경우 IOC 컨테이너를 전혀 사용하지 않아 테스트를 수행 할 때 포맷터를 조롱합니다. 다시 잘 작동합니다.
내 통합 테스트에 관해서확인 지금 ... 이상적으로는 분명히 통합 테스트 기간 동안 전체 스택을 실행하지만,의는 HtmlEmailFormatter 척 할 거라고 그래서 나는 그것이 나의 최선의 이익의 결정 약간 느린 외부 WebService에있다 대신에 Test Double을 사용하십시오. 하지만 ... 모든 통합 테스트에서 Test Double을 사용하고 싶지는 않습니다. 일부 테스트 (실행이 빠른 스모크 테스트 스타일 테스트 세트) 만 있습니다.
이 시점에서 나는 webservice의 모의 버전을 삽입하려고합니다. 그래서 올바른 메소드가 여전히 호출되어 있는지 확인할 수 있습니다.
그래서, 진짜 질문은 : 나는 여러 매개 변수를 사용하는 생성자를 가진 클래스가있는 경우
이, 어떻게 내가 즉, 제대로을 (매개 변수 중 하나가 개체의 인스턴스로 해결해야합니까 setup 모의)하지만 나머지는 autofac으로 채워 집니까?
통합 테스트의 경우 유닛 테스트와 동일하게 유지됩니다. DI 컨테이너를 사용하지 말고 수동으로 객체를 인스턴스화하십시오 (아마도 통합 테스트 스위트에있는 팩토리 메소드의 도움으로). – Steven