Я работаю над доказательством использования Dependency Injection с несколькими многочисленными DI-структурами.Я пытаюсь попробовать модульное тестирование некоторых классов, в настоящее время использующих Autofac в качестве контейнера DI.
Допустим, у меня есть этот класс ...
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
.
Подсказки были бы хорошими.Я все еще хочу выяснить это, но общее направление было бы потрясающим.
РЕДАКТИРОВАТЬ
Просто добавив простой тестовый пример, показывающий, что я не хочу использовать 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);
}