gpt4 book ai didi

c# - 使用 Autofac 对委托(delegate)工厂进行单元测试

转载 作者:行者123 更新时间:2023-11-30 15:39:58 25 4
gpt4 key购买 nike

我正在努力证明将依赖注入(inject)与一些大量的 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 委托(delegate)进行单元测试或注入(inject)模拟。

提示会很好。我仍然想弄清楚这一点,但总体方向会很棒。

编辑

只需添加一个简单的测试用例,表明我不想在我的单元测试中使用 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);
}

最佳答案

如果您通过容器解析 SaveSpecialUserCommand,您不能模拟工厂委托(delegate),因为这是 Autofac 为您自动生成的部分。那么问题来了,为什么你需要伪造实际的代表?

更新:最初有点误会。要“伪造”委托(delegate),您可以简单地使用 lambda,如下所示:

var user = new UserImpl();
var cmd = new SaveUserCommand(...);

var command = new SaveSpecialUserCommand(user, u => cmd);

关于c# - 使用 Autofac 对委托(delegate)工厂进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9814057/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com