微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

单元测试 – 不带无参数构造函数的.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.jb51.cc/javaschema/281433.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐