방금 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 인스턴스를 수동으로 작성과 테스트의 변화를 시도하고 테스트 솔루션은 꽤 놀라운 예상
코드가 정상적으로 보이고 문제를 재현 할 수 없습니다. 나에게 IpAddress는 "무엇이든"을 포함하고 있습니다 ... 빈 프로젝트에서 시도해 볼 수 있습니까? 그리고 'AuditHistoryLoggingService'는 무엇입니까? – nemesv
AuditHistoryLoggingService - LoggingService로 읽으므로 방금 원래 코드에서 "과도한 문자"를 제거하려고했습니다. –
('String' 타입의) IpAddress 속성은 올바른 값을 가지고 있습니다. LogginService 클래스 생성자에 중단 점을 추가하고 IClientDataProvider 인스턴스를 검사했습니다. 'LoggingService' 클래스 붙여 넣기를 복사 할 수 있습니까? –