Я только что создал свой первый тест с помощью AutoFixture. SUT имеет следующий конструктор.
public LoggingService(
IClientDataProvider clientDataProvider, ... other dependencies...)
Тестовая установка имеет следующий код.
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>();
Теперь, когда я изучаю содержимое sut
, я вижу, что свойство IpAddress
внедренного экземпляра IClientDataProvider
возвращает значение null вместо «независимо».
Что я сделал не так?
Я скопировал сервис и необходимые интерфейсы в пустой проект, после чего моки заработали как положено.
Интерфейсы, которые являются типами аргументов конструктора службы в реальном проекте, определены в 3 отдельных сборках, которые имеют дополнительные зависимости. У меня было несколько неожиданных ошибок «Невозможно загрузить сборку» при запуске теста, потому что для тех сборок, на которые есть прямые ссылки, потребовалось несколько дополнительных сборок. Так что, похоже, проблема с загрузкой сборки.
Однако я попробовал вариант теста с ручным созданием экземпляра SUT с фиктивными объектами, созданными вручную с помощью Moq, и тест работал, как и ожидалось.
AuditHistoryLoggingService
? - person nemesv   schedule 17.09.2012String
) имеет правильное значение. Я добавил точку останова в конструкторе класса LogginService и проверил экземплярIClientDataProvider
. Можете ли вы скопировать и вставить свой классLoggingService
? - person Nikos Baxevanis   schedule 17.09.2012