单元测试 – 不带无参数构造函数的.NET单元测试,以方便依赖注入

前端之家收集整理的这篇文章主要介绍了单元测试 – 不带无参数构造函数的.NET单元测试,以方便依赖注入前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图让单元测试不依赖于调用container.Resolve< T>()作为依赖关系.

我目前正在使用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方法的目的.总而言之,测试类本身不适合注射.

和IMO,当您开发测试不依赖于容器时,这成为一个非问题.毕竟,每个测试类应该集中在一个“被测系统”(SUT)上.为什么没有设置方法直接实例化该系统并提供每个依赖(通常以假货的形式)?通过这样做,您可以有效地从测试中删除另一个不必要的依赖关系,即IoC框架.

在旁注:我在测试中唯一涉及IoC框架的是在我的“容器测试”中.这些测试集中在验证容器在使用application or assembly modules初始化之后可以从容器中解决某些服务.

原文链接:https://www.f2er.com/javaschema/281433.html

猜你在找的设计模式相关文章