Я работаю над проверкой использования инъекций зависимостей с некоторыми многочисленными каркасами DI. Я пытаюсь попытаться выполнить тестирование некоторых классов, в настоящее время использующих Autofac в качестве контейнера DI.Модуль Тестирование фабрики делегатов с Autofac
Скажем, у меня есть этот класс ...
public class SaveUserCommand : DBCommandBase<UserImpl>
{
public delegate SaveUserCommand Factory(UserImpl impl);
private UserImpl impl;
private IAuditableHelper helper;
public SaveUserCommand(UserImpl impl, IAuditableHelper helper)
{
this.impl = impl;
this.helper = helper;
}
public override UserImpl Execute(object dataTrans)
{
return this.impl;
}
}
^Команда структурирован бизнес слой кстати.
У меня есть другая команда, которая опирается на вышеприведенной команды таким образом ...
public class SaveSpecialUserCommand : DBCommandBase<UserImpl>
{
public delegate SaveSpecialUserCommand Factory(UserImpl user);
private UserImpl user;
SaveUserCommand.Factory saveUserCommand;
public SaveSpecialUserCommand(UserImpl user, SaveUserCommand.Factory saveUserCommand)
{
this.user = user;
this.saveUserCommand = saveUserCommand;
}
public override UserImpl Execute(object dataTrans)
{
this.user.IsSpecial = true;
this.saveUserCommand(this.user).Execute(dataTrans);
return this.user;
}
}
Использование Autofac, он решает все зависимости в SaveSpecialUserCommand
.
То, что я не уверен, - это то, как я могу выполнить единичный тест или ввести макет в делегат SaveUserCommand.Factory
.
Подсказки были бы хорошими. Я все еще хочу понять это, но общее направление было бы потрясающим.
EDIT
Просто добавив простой тестовый пример, показывающий, я не хочу использовать Autofac в моих модульных тестов, чтобы создать свои команды.
[Test]
public void SomeSimpleTestTest()
{
var user = new UserImpl();
var command = new SaveSpecialUserCommand(user, /*This is what I need to mock. SaveUserCommand.Factory*/null);
var retVal = command.Execute(this._mockTransaction);
Assert.IsNotNull(retVal);
Assert.IsTrue(retVal.IsSpecial);
}
Ну, я не планировал, чтобы Autofac создавал мои команды для модульных тестов. Я отредактирую с помощью тестового примера, с которым я * пытался * работать. – DavidAndroidDev
Хм ... Если вы не предлагаете мне использовать мой контейнер DI в своих модульных тестах и размещать mocks внутри контейнера для тестовых случаев? – DavidAndroidDev
Нет, у меня создалось впечатление, что вы * использовали * контейнер в своем модульном тесте. См. Мой обновленный ответ. –