우리는 새로운 소프트웨어 개발 프로젝트에서 StructureMap 을 사용하고 있습니다. 팀 구성원 중 하나가 기본적으로 StructureMap 컨테이너 구성을 테스트하는 단위 테스트를 구현했습니다 . 다음을 수행하여이를 수행합니다.
- 응용 프로그램 네임 스페이스의 클래스에 대해 구성된 어셈블리 인스턴스 수를 계산합니다.
- 클래스 수준에서 예상 인스턴스를 정의합니다
- 예상 인스턴스가 발견 된 총 인스턴스와 일치하는지 확인합니다.
- 예상 인스턴스가 테스트에 정의 된 인스턴스와 일치하는지 확인
이에 대한 예는 다음과 같습니다.
var repositories = container.GetAllInstances<IEnvironmentRepository>();
Assert.AreEqual(1, repositories .Count());
foundInstances = foundInstances + repositories .Count();
우리는 또한 다음 수업에 대한 '단위 테스트'를 가지고 있습니다.
public MyClass(IEnvironmentRepository environmentRepository)
{
}
이 테스트에서는 IEnvironmentRepository를 모방하므로 라이브 시스템에서와 같이 컨테이너에서 컨테이너를 주입하지 않습니다.
동료는 "단위 테스트는 자체 구성 만 테스트합니다"라는 줄에 주석이있는 구조 맵 구성의 단위 테스트를 무시했습니다. 이것은 분명히 테스트의 목적이며 내 의견으로는 완벽하게 유효합니다. 테스트를 무시한 사람이 IEnvironmentRepository
(테스트는 여전히 무시한 상태)에 대한 구조 맵 구성을 제거 하고 전체 단위 테스트 스위트를 실행하도록 요청했으며 모두 통과했습니다. 그런 다음 응용 프로그램을 실행했으며 이제 컨테이너 구성이 유효하지 않기 때문에 실패했습니다. 내 의견으로는, 이것은 시험의 가치를 입증했으며 내 동료는 여전히 동의하지 않았다. 그는 우리가 구성을 테스트해서는 안된다고 말했지만, 이것이 단위 테스트의 범위 내에 있다고 생각합니다.
그래서 많은 질문들;
- 유효한 단위 테스트입니까-우리는 컨테이너 맵의 구성이 아닌 컨테이너의 구성을 테스트하고 있습니다 (그러나 중복을 볼 수는 있습니다)
- 그렇지 않은 경우 테스트하지 않고 구성을 어떻게 검증 할 수 있습니까? 실수로 필요한 코드 줄을 삭제하고 체크인하는 것을 어떻게 막을 수 있습니까?
- 해야
MyClass
단위 테스트의 인스턴스를 해결IEnvironmentRepository
용기로부터이 통과?