2010-12-19 3 views
0

내 컨트롤러를 테스트하려고하는데 각각은 저장소에 대한 종속성이있는 서비스에 대한 종속성이 있습니다. 나는 다음과 같은 코드 ... 나는 그것의 저장소에 대한 기본 인스턴스를 필요하지 않는으로, ServiceInterface 구상 클래스와 관련된 오류가 계속AutoMocker 질문

Mock.Get(controller.Get<ServiceInterface>()) 
      .Setup(s => s.GetData()) 
      .Returns(FakeData.Create<Entity>(25)); 

이 (주사). 나는 FakeService를 만드는 것을 피하려고 노력하고있다. 그러나 그 것처럼 보이는 것은 내가해야 할 일이다. 누구든지 제안 할 수 있습니까?

답변

0

테스트 할 수업은 무엇이며 어떤 수업을 스터디하려고합니까? 나는 당신이 당신의 컨트롤러를 테스트하려고 노력하고 있고, 당신의 서비스를 완성하려고하고 있다고 생각할 것이다. 그렇다면 서비스의 구체적인 구현 및 종속성이 테스트에 전혀 참여하지 않아야하며 관련성이 없어야합니다. 컨트롤러를 테스트하는 데 필요한 서비스 인터페이스의 동작을 스텁해야합니다.

나는 의도 한대로 추측 할 뿐이므로 내 대답이 이해가되지 않는다면 테스트하려는 내용을 보여주는 코드를 게시해야 할 수도 있습니다.

+0

내 컨트롤러 내 서비스에 주입 의존성을 가지고, 내 서비스는 주입 종속성이 저장소에. 나는 그것을 주입 할 수 있도록 서비스를 조롱하려고 노력하고 있지만, 서비스를 조롱하려고 할 때 AutoMocker가 조롱 된 서비스에 모의 저장소를 삽입 할 수 없다는 오류가 발생합니다. 희망이 조금 더 설명합니다. – jsteve81

+0

그건 정말 말이되지 않습니다. 컨트롤러가 서비스 인터페이스에 의존하고 컨트롤러가 저장소 인터페이스에 직접 의존하지 않으면 서비스 인터페이스를 조롱 할 때 NOTHING이 저장소에 의존해야합니다.이 경우 저장소에 테스트가 나타나서는 안됩니다. 테스트 설정에서 저장소 인터페이스를 사용하고 있습니까? FakeData 클래스에서 사용합니까? –

1

My response to this question은 서비스를 프로그래밍하여 인터페이스를 수행하고 종속성으로 해당 인터페이스를 사용한 다음 단원 테스트에 도움이되는 서비스를 조롱하는 방법을 보여줍니다.

편집

MoqAutoMocker 어떤 경험을 가지고 있지 않는, 내 조언은 다소 제한됩니다. 그러나 저는 Moq을 직접 사용하려고 시도 할 것입니다. 당신이 당신이 그것의 자동 조롱 측면을 소개 할 수, 작동 보장하면

var serviceMock = new Mock<IService>(); 
serviceMock.Setup(r => r.GetData()) 
    .Returns(FakeData.Create<Entity>(25)); 
var controller = new MyController(serviceMock.Object); 

:

var autoMocker = new MoqAutoMocker<MyController>(); 
Mock.Get(autoMocker.Get<IService>()).Setup(r => r.GetData()) 
    .Returns(FakeData.Create<Entity>(25)); 
MyController controller = autoMocker.ClassUnderTest; 
+0

감사합니다 Stripling ... 내 서비스가 이미 인터페이스를 구현합니다. 자세한 내용은 두 번째 답변에 대한 설명을 참조하십시오. – jsteve81

+0

@jsteve : 컨트롤러가 서비스 인터페이스 또는 구체적인 클래스에 종속되어 있습니까? 생성자가 인터페이스를 사용하도록 지정하면 AutoMock이 구체적인 클래스의 종속성을 인식한다는 것은 거의 불가능합니다. – StriplingWarrior

+0

서비스 인터페이스 – jsteve81