IoC 容器本身的单元测试

2024-04-11

我认为以前没有人问过这个问题,尽管搜索这样的术语确实很困难单元测试ioc容器并且没有找到有关如何实现 IoC 以便执行单元测试的问题。

我想对 IoC 容器本身进行单元测试,基本上是因为有时我会遇到容器问题(就像应用程序的任何其他部分一样),并且仅通过调试来测试依赖项的解析非常麻烦。

如果我能为这些情况引入单元测试,我想这会省去我很多麻烦。

Update

这样的事情不是单元测试吗?这是集成测试吗?

[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, too.

顺便说一句:与使用 Web 应用程序进行调试相比,通过这样做,我在很短的时间内就找到了问题的根源。


这更多地落入集成测试类别。当解析时,您的组件注册可能会执行各种外部系统调用(数据库、文件系统、网络、服务...),这就是单元测试结束的地方。

您可以对此类(集成)测试执行的一种方法是简单地解析您的应用程序根类型。这可能并不完整(特别是当您的应用程序执行大量延迟加载时),但通常足以发现丢失的位。

Edit #2 (回应OP编辑)

当然,可能可以在不实际接触任何提到的外部系统的情况下进行根解析测试,但仍然可能存在大量依赖项接线和设置正在进行真实的物体(如,不是假货/存根)。这是许多潜在的失败原因(我想说对于单元测试来说甚至太多了)并且由开发人员来判断这属于哪个测试类别。

进行组件解析测试(涉及更小范围的解析)可能适合单元测试,但同样,这是由开发人员判断的,这在很大程度上取决于对象在解析时执行的操作。大多数现代容器通常提供的不仅仅是简单的存储,这一点应该考虑在内。

我想说的是,如果你说DaoModule你想验证它可以从容器中解析,当然,这个可能是单元测试。但如果解决你的DaoModule设置连接并查询数据库以查看它是否处于有效状态,您可能需要重新考虑此类测试的去向。

Edit #1 (回应有问题的OP评论)

我想设置一个测试,在其中配置容器,向其抛出抽象类型(或接口),并使其正确解析为预期类型。

基本上,您想验证您的容器是否正常工作?不要那样做。只需选择一个经过测试的容器,您就可以假设它可以完成其工作。如果您觉得需要对第三方组件进行单元测试,那么您确实应该选择不同的组件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IoC 容器本身的单元测试 的相关文章

  • 开玩笑错误意外的令牌...(ES6)

    每当我在命令行中运行 jest 时 都会收到以下错误 Test suite failed to run Users
  • DI:IDisposable 对象的处理寿命

    所以我正在开发我的 DI IoC 容器OpenNETCF IoC http ioc codeplex com我有一个 合理的 功能请求 为容器集合中的 IDisposable 项目添加某种形式的生命周期管理 我目前的想法是 由于我无法查询对
  • 使用文件 IO 的单元测试方法

    我正在努力养成编写单元测试的习惯 我之前写过一些 但它们通常都很基础 我想开始转向 TDD 因为我想提高质量我的代码 设计和结构 减少耦合 同时希望减少可测试构建的回归数量 我从一个相对简单的项目开始 生成的程序监视一个文件夹 然后对该文件
  • GoogleTest 枚举类的测试错误打印

    我正在使用 GoogleTest 版本 1 7 0 来测试我的 C 应用程序 我有一个枚举定义如下 namespace MyNamespace enum class MyEnum MyEnumValue MyEnumValue2 Googl
  • 当标题中包含“&”时,电子邮件标题无法正确显示,如何在 JavaScript 中修复?

    我有一些代码以以下格式显示文章标题列表 简短描述和作者姓名 标题 作者姓名 描述 作者的姓名和描述与此处无关 因为它们始终显示正确 大多数标题也可以正确显示 以下是一些虚构的示例 关于银行业务您需要了解的最重要的一件事 作者姓名 正确显示
  • Spring @ContextConfiguration

    我正在运行下一个测试 import static org junit Assert assertEquals import org junit Test import org junit runner RunWith import org
  • 如何用 Jest 模拟 Sequelize?

    我正在尝试为调用 Sequelize 来创建数据库的代码编写单元测试 我一生都无法弄清楚如何模拟对 Sequelize 的调用 以便我可以断言他们已经正确创建了数据库表 我点击 Sequelize 的代码如下 import Sequeliz
  • 在 Angular 单元测试中应该如何处理运行块?

    我的理解是 当您在 Angular 单元测试中加载模块时 run块被调用 我认为如果你正在测试一个组件 你不会想同时测试run块 因为unit测试应该只是测试一个unit 真的吗 如果是的话有什么办法可以防止run阻止运行 我的研究让我认为
  • 如何检查带有通配符的模拟调用?

    我正在编写单元测试 并且想要检查具有函数对象的调用 如下所示 call u mock u foobar
  • 使用 TFS 2015 运行 Jest 单元测试

    有人尝试将 jest 单元测试与 TFS 2015 集成吗 我尝试使用 Chutzpah 测试适配器 https visualstudiogallery msdn microsoft com f8741f04 bae4 4900 81c7
  • 如何在 Java Spring 中模拟 RestTemplate?

    public class ServiceTest Mock RestTemplate restTemplate new RestTemplate InjectMocks Service service new Service Respons
  • 如何为未捕获的异常处理程序编写单元测试

    我有一个函数可以捕获uncaught例外情况 如下 有没有办法编写一个单元测试来执行uncaught exception handler 功能正常 但测试正常退出 import logging def config logger logge
  • 如何测试某些代码在 C++ 中无法编译? [复制]

    这个问题在这里已经有答案了 可能的重复 单元测试编译时错误 https stackoverflow com questions 605915 unit test compile time error 我想知道是否可以编写一种单元测试来验证给
  • 寻找网站测试自动化的方法

    我们开发定制调查网站 我正在寻找一种方法来自动化这些网站的模式测试 调查通常包含许多复杂的规则和分支 这些规则和分支也会根据项目的响应方式而触发 所有调查在发布给客户之前都经过严格测试 此测试需要大量的手动工作 我想了解一些可以通过回答问题
  • $compile 不编译 Karma/Jasmine 中的模板

    我已经用 PhantomJS 和 Chrome 对此进行了测试 下列的这个问题 https stackoverflow com questions 27026596 accessing compiled template in unit t
  • 我可以将 SimpleInjectors 诊断结果写入日志文件吗?

    在调用中使用简单注入器container Verify 在我的配置结束时 并在调试器中获取诊断信息 如中所述文档 http simpleinjector codeplex com wikipage title Diagnostics 我想将
  • Django:测试客户端的上下文在 shell 中为空

    我无法访问context的属性HttpResponse来自 ipython 的对象 但单元测试访问context 这是单元测试 测试运行正常通过 from django test import Client TestCase from dj
  • 什么是适合 Rails 3 的测试框架?

    去年我一直在使用 Ruby On Rails 但是 无法进行单元测试 现在我必须编写单元测试代码 哪个测试框架好 为什么 有这方面的好的教程吗 我的系统配置 Ruby 1 9 2 Rails 3 Ubuntu 10 第一个技巧是 尝试升级到
  • 如何断言 Unittest 上的可迭代对象不为空?

    向服务提交查询后 我会收到一本字典或一个列表 我想确保它不为空 我使用Python 2 7 我很惊讶没有任何assertEmpty方法为unittest TestCase类实例 现有的替代方案看起来并不正确 self assertTrue
  • IQueryable 单元或集成测试

    我有一个 Web api 并且公开了一个端点 如下所示 api 假期 name name 这是 Web api 的控制器 get 方法 public IQueryable

随机推荐