2012-09-17 3 views
1

방금 ​​AutoFixture를 사용하여 첫 번째 테스트를 만들었습니다. SUT에는 다음 생성자가 있습니다.모의 객체가 AutoMix와 AutoMix를 통해 주입 됨, 예기치 않은 동작

public LoggingService(
    IClientDataProvider clientDataProvider, ... other dependencies...) 

테스트 설정에는 다음 코드가 있습니다. 내가 sut의 내용을 검사 할 때

var fixture = new Fixture().Customize(new AutoMoqCustomization()); 

string ipAddress = "whatever";// fixture.CreateAnonymous<string>(); 

var clientDataProviderMock = fixture.Freeze<Mock<IClientDataProvider>>(); 
clientDataProviderMock.Setup(cdp => cdp.IpAddress).Returns(ipAddress); 

LoggingService sut = fixture.CreateAnonymous<LoggingService>(); 

지금, 나는 IClientDataProvider 반환 주입 된 인스턴스의 특성 IpAddress 대신 "무엇"의 널 (null) 것을 알 수있다.

내가 뭘 잘못 했니?


빈 프로젝트에 서비스와 필요한 인터페이스를 복사 한 다음 mocks가 예상대로 작동했습니다.

실제 프로젝트에서 서비스의 생성자 인수 유형 인 인터페이스는 추가 종속성이있는 3 개의 개별 어셈블리로 정의됩니다. 직접 참조 된 어셈블리에는 여러 개의 추가 어셈블리가 필요했기 때문에 테스트 시작시 예기치 않은 "어셈블리를로드 할 수 없습니다"오류가 발생했습니다. 그래서 어셈블리 로딩 문제 인 것 같습니다.

그러나, 나는 MOQ를 사용하여 수동으로 생성 된 모의 객체와 SUT 인스턴스를 수동으로 작성과 테스트의 변화를 시도하고 테스트 솔루션은 꽤 놀라운 예상

+0

코드가 정상적으로 보이고 문제를 재현 할 수 없습니다. 나에게 IpAddress는 "무엇이든"을 포함하고 있습니다 ... 빈 프로젝트에서 시도해 볼 수 있습니까? 그리고 'AuditHistoryLoggingService'는 무엇입니까? – nemesv

+0

AuditHistoryLoggingService - LoggingService로 읽으므로 방금 원래 코드에서 "과도한 문자"를 제거하려고했습니다. –

+0

('String' 타입의) IpAddress 속성은 올바른 값을 가지고 있습니다. LogginService 클래스 생성자에 중단 점을 추가하고 IClientDataProvider 인스턴스를 검사했습니다. 'LoggingService' 클래스 붙여 넣기를 복사 할 수 있습니까? –

답변

1

으로 일했다. 단위 테스트 프로젝트를 만들 때 먼저 Moq 4.0에 대한 참조를 추가했습니다. AutoFixture는 나중에 추가되었고 Moq 3.1이 필요해 보였으므로 해당 DLL을 bin \ Debug에 직접 복사했습니다. 그러나 프로젝트 파일의 해당 HintPath 요소는 여전히 4.0 dll을 가리 킵니다. Moq 3.1이 앉아있는 곳을 가리 키도록 HintPath를 변경하자마자 테스트가 제대로 작동하기 시작했습니다. 그래서 Mark는 그의 제안으로 옳았습니다. 그러나 증상은 아주 달랐습니다.