单元测试IoC容器本身(Unit Testing the IoC container itself)

2019-09-16 15:51发布

我不认为这是问过,虽然它真的很难寻找像单元测试IoC容器的一个术语,而不是找到一个关于如何以执行单元测试实现的IoC问题。

我想有单元测试针对的IoC容器本身主要是因为有时我有问题与容器(比如你可以与应用程序的任何其他部分),它是相当麻烦的测试依赖的分辨率仅仅调试。

如果我能介绍单元测试,对于这些情况,我认为这将节省我很多麻烦。

更新

是这样的,而不是一个单元测试? 它是一个集成测试?

[TestClass]
public class IoC
{
    private IWindsorContainer _container;

    [TestInitialize]
    public void TestInit()
    {
        _container = new WindsorContainer();
        _container.Install(new WindsorInstaller());
    }

    [TestMethod]
    public void ContainerShouldResolve_MembershipProvider()
    {
        ContainerShouldResolve<IMembershipProvider>();
    }

    public void ContainerShouldResolve<T>()
    {
        T result = _container.Resolve<T>();
        Assert.IsInstanceOfType(result, typeof(T));
    }
}

唯一真正的“不自足”的参考是一个连接字符串,我不得不线插入app.config 。 另外:试图解决在PerWebRequest生活方式的组成部分,我不得不添加相关httpModule ,太。

顺便说一句:做这个,我发现相比,现在它正在采取我通过使用Web应用程序进行调试我的问题在很少的时间源。

Answer 1:

这属于多地进入集成测试类别。 解决当你的组件注册可能会做各种外部系统调用(数据库,文件系统,网络,服务...),而这正是单元测试结束。

一种方法,你可以做这样的(集成)测试的,是简单地解决您的应用程序的根类型。 这可能是不完整的(尤其是当你的应用程序确实懒加载大位),但往往是不够好,发现失位。

编辑#2( 响应于OP编辑)

当然,有可能做根决心测试没有实际接触中提到的任何外部系统,但可能仍然存在很大的依赖性布线和设置回事真实物体 (如,没有假货/存根)。 这是失败 (我会说,即使过多,单元测试) 有许多潜在的原因 ,它的最大开发商判断一下测试类此落入。

就是做组件测试的决心(决心,涉及到更小的范围)可能是罚款,单元测试,但再次 - 它是开发商判断,它在很大程度上取决于什么对象在做解析。 大多数现代容器通常提供比简单的存储越来越这应该被考虑在内。

我想说的是,如果你有说DaoModule和您要验证它可以从容器中得到解决,当然,这可能是一个单元测试 。 但是,如果解决您DaoModule设置连接和查询数据库,看看它是否在有效的状态,你可能需要重新考虑在那里这样的测试会去。

编辑#1( 响应对问题OP评论)

我想建立一个测试,我配置的容器,它抛出一个抽象类(或接口),并将其正确解析到预期的类型。

基本上,你要确认您的容器是否适用? 不要那样做 。 只需选择所测试的容器,你可以认为它可以做自己的工作。 如果你觉得有必要进行单元测试您的第三方组件,你真的应该选择不同的。



Answer 2:

如果你真的whant写像IoC的基础设施代码单元测试,以检查IoC实现是正确的,你可以看看国际奥委会的单元测试源代码。

例如DOTNET的-S autofac IoC的单元测试

其他答案和评论你的问题(我在第一次运行还)以为你想写autoamted测试,使舒尔你的组件,其中正确的国际奥委会有线。 我们大多数人把这种测试的integrationtest而不是单元测试。



文章来源: Unit Testing the IoC container itself