2017-12-13 6 views
0

Autofac 키 입력을 사용하는 공장에서 테스트를 작성하는 데 문제가 있습니다. Autofac 모듈에서 AutoMock - 키 등록으로 단위 테스트하는 법?

,이 같은 일을 등록 : 내가 할 수있는 그러나

public MessageHandlerFactory(
    IIndex<MessageTypeEnum, IMessageHandler> messageTypeToHandlerMap) 

:

builder.RegisterType<TypeAMessageHandler>().As<IMessageHandler>() 
    .Keyed<IMessageHandler>(MessageTypeEnum.A); 

builder.RegisterType<TypeBMessageHandler>().As<IMessageHandler>() 
    .Keyed<IMessageHandler>(MessageTypeEnum.B); 

builder.RegisterType<MessageHandlerFactory().As<IMessageHandlerFactory>(); 

그리고 공장의 생성자가 Autofac에 의해 생성자에 주입 멋진 인덱스를 가져옵니다 automock.Create<MessageHandlerFactory>()을 사용할 때 Automock으로 단위 테스트를 위해 IIndex<,>을 주입하는 방법을 알아낼 수 없습니다. 메시지 핸들러 구현을 제공하기 위해 AutoMock을 알려주더라도 키순 인덱스로 가져 오지 않습니다. IIndex의 명시 적 구현을 ​​만들고이를 제공하는 Automock에도 작동하지 않습니다. 두 경우 모두 공장에서 빈 IIndex<,>이 주입됩니다.

키 입력을 테스트하는 올바른 방법은 무엇입니까?

답변

0

글쎄, 내가 명시 적으로 SUT 구축하여이 문제를 해결하기 위해 관리했습니다 : 추가 종속성이 내 진짜 예에서

internal class MockIndex<T, T1> : Dictionary<T, T1>, IIndex<T, T1> 
{ 
} 

IIndex<FileTransportTypeEnum, IMessageHandler> index = new MockIndex<MessageTypeEnum, IMessageHandler> 
{ 
    {MessageTypeEnum.A, new TypeAMessageHandler()}, 
    {MessageTypeEnum.B, new TypeBMessageHandler()} 
}; 

_target = new MessageHandlerFactory(index); 

을, 나는 아직도 날 수있는 방법을 찾으려면 Automock을 사용하여 이들의 기본 구현을 제공하십시오. 또한, Autofac은 실제로 호출 될 때마다 TypeAMessageHandler에 대해 동일한 객체를 반환하기 때문에이 방법으로는 실제로 작동하지 않습니다.

관련 문제