gpt4 book ai didi

unit-testing - 没有无参数构造函数的 .NET 单元测试,以促进依赖注入(inject)

转载 作者:行者123 更新时间:2023-12-04 00:53:27 25 4
gpt4 key购买 nike

我试图让单元测试不依赖于调用 container.Resolve () 来获取它们的依赖项。

我目前正在使用 AutoFac 2.2.4,试过 xUnit.NET NUnit , 但两者都有 本期 :

No parameterless constructor defined for this object



我该如何解决这个问题?它是支持这一点的特定单元测试框架,还是该框架是如何配置的?

我不应该这样做吗?或者我可以设置测试类以使用具有它唯一依赖项的构造函数吗?

这是一些代码:
public class ProductTests : BaseTest
{
readonly private IProductRepository _repo;

public ProductTests(IProductRepository r)
{
_repo = r;
}

//working unit tests here with default constructor
}

我是否选择在基类构造函数中错误地初始化容器?
public abstract class BaseTest
{
protected BaseTest()
{
var builder = new ContainerBuilder();
builder.RegisterType<ProductRepository>().As<IProductRepository>();
builder.Build();
}
}

最佳答案

最初的问题确实是由于测试框架是如何设计的。它们都需要一个无参数的构造函数来实例化测试实例。理所当然地。使用这些框架,构造函数将不依赖于测试初始化​​。这就是 SetUp 的目的。方法。总而言之,测试类本身并不适合注入(inject)。

并且 IMO,当您开发测试以不依赖于容器时,这将成为一个非问题。毕竟,每个测试类都应该专注于一个“被测系统”(SUT)。为什么不让 setup 方法直接实例化该系统并提供每个依赖项(通常以假货的形式)?通过这样做,您有效地从测试中删除了另一个不必要的依赖项,即 IoC 框架。

附带说明:我在测试中涉及 IoC 框架的唯一一次是在我的“容器测试”中。这些测试的重点是验证在使用 application or assembly modules 初始化容器后是否可以从容器中解析某些服务。 .

关于unit-testing - 没有无参数构造函数的 .NET 单元测试,以促进依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4373592/

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