2011-08-09 2 views
0

TDD에 대해 살펴보고 시나리오를 통해 도움을받을 수있었습니다.TDD가 내부 생성자에 Mocked Repository (UnitOfWork)를 삽입합니다.

내 프로젝트는 MVC3을 사용하며 BAL 및 DAL 레이어로 구성되어 있습니다. 각 레이어는 자체 프로젝트에 있습니다. BAL은 저장소 패턴을 통해 데이터베이스에 액세스합니다. EntityFramework를 사용하고 있기 때문에 UnitOfWork 패턴도 구현했습니다.

public class ExampleService 
{ 
    private UnitOfWork unitOfWork; 
    private bool isProcessing = false; 

    internal ExampleService(UnitOfWork unitOfWork) 
    { 
     this.unitOfWork = unitOfWork; 
    } 
    public void ExposedMethod() 
    { 
     //do stuff with the unitOfWork 
    } 
} 

질문 : 다음은 BAL에서 서비스 클래스는 모습입니다 나는 이것에 대한 단위 테스트를 만들고 싶습니다 (분명 내가 코드 전에 테스트를 작성해야). 그러나 코드를 그대로 실행하면 UnitOfWork를 사용하고 데이터베이스에 연결할 때 테스트가 통합 테스트가됩니다. 메모리에있는 더미 데이터에 액세스하는 새 UnitOfWork를 모의 수 있지만 내부로 생성자로 주입하는 방법을 이해하지 못합니다. 차라리 각 프로젝트 안에있는 단위 테스트를 작성하지 않을 것입니다.

의견이 있으십니까?

답변

3

모든 내부 구성원을 단위 테스트 프로젝트에 표시하려면이 클래스가 포함 된 어셈블리를 [InternalsVisibleTo] 특성으로 꾸밀 수 있습니다.

또 다른 가능성은 클래스를 재사용 할 수있게하기 위해이 생성자를 public으로 만드는 것입니다. 일반적으로 DI 와이어 업은 아키텍처 (GUI)의 가장 바깥 쪽 레이어에서 수행되어야하며 다른 종속성의 생성자는 공용이어야합니다. 이를 통해이 DAL 계층을 다른 프로젝트에서 재사용 할 수 있습니다.

+0

[InternalsVisibleTo] 내 질문을 그대로 해결합니다. 나는 여전히 DI로 뭔가를 놓치고 있을지 모르지만 내가 보여준 예제 수업은 BAL에 있고, UnitOfWork는 DAL에 있습니다. 예제 클래스에 대한 액세스를 제어하는 ​​다른 클래스가 있기 때문에 내부에 생성자가 표시되어 있습니다. 나는 이것을 좀 더 고려해야 할 것이다. 감사! – AFrieze