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 容器本身的单元测试 的相关文章

  • 如何在不使用 Mock 的情况下对 Python 方法进行存根

    我是一名 C 开发人员 正在转向一些 Python 领域 所以我还不知道自己在做什么 我读到你并不真正需要 Python 的依赖注入 有人告诉我 您可以在代码中实例化对象并让它们按照您想要的方式运行 但是 您可以将这些对象上的方法指向我在测
  • 模拟 RSpec 单元测试中的竞争条件

    我们有一个异步任务 它对对象执行可能需要长时间运行的计算 然后结果缓存在对象上 为了防止多个任务重复相同的工作 我们添加了带有原子 SQL 更新的锁定 UPDATE objects SET locked 1 WHERE id 1234 AN
  • 使用 PHPUnit 测试受保护方法的最佳实践

    我发现有关的讨论你测试私有方法吗 https stackoverflow com questions 105007 do you test private method内容丰富 我决定 在某些类中 我想要受保护的方法 但要测试它们 其中一些
  • Robolectric 未正确处理 getApplicationContext() - NPE

    我一直在使用 Robolectric 在 Android 应用程序上运行一些测试 到目前为止它运行良好 我的应用程序将 getApplicationContext 的结果传递给构造函数 但 Robolectric 应该确保该值不为 null
  • 使用 Maven 对 Android 进行单元测试

    我有一个关于使用 Maven 构建的 android 项目的问题 我们让它运行我们的活动测试 但现在我们需要它来运行单元测试 单元测试与活动测试位于同一项目中 我如何在 pom xml 文件中设置它 这是父 Pom xml 文件
  • 在测试设置和拆卸中重定向 Console.Out

    这是后续获取从单元测试中发送到 Console Out 的输出 https stackoverflow com questions 2139274 grabbing the output sent to console out from w
  • 依赖注入在 C++ 中有用吗

    C uses 依赖注入 DI 很多有一个lossless and testable平台 为此 我需要一个interface也许还有一个DI or 控制反转 IoC 容器为了解决我的情况 但是在 C 中如何做到这一点呢 我读过一些相关内容 似
  • 如何模拟类路径上属性文件的存在?

    这肯定是一个常见问题 我有一个像这样的属性文件my settings properties由应用程序类读取 当我编写测试类时 它需要测试可能存在的不同场景my settings properties为了确保最大的代码覆盖率 例如空属性文件
  • C# 压力测试 - 模拟对给定共享资源的多次访问

    如何在 C 单元测试中模拟 压力测试 100 个用户访问给定的共享资源 例如数据库 假设您正在访问真实的数据库 那么您就处于集成测试的范围内 最简单的方法是从多个线程访问资源 例如 Test public void SimpleStress
  • 单元测试定位服务

    我有一个位置跟踪服务 正在尝试对其进行单元测试 我正在尝试使用 locationManager addTestProvider 和 setTestProviderLocation 方法来实现此目的 但是 我似乎无法通过提供程序获取任何位置并
  • 无法测试通过 NSubstitute 接收的 ILogger

    我有一个 Net Core 3 应用程序 并尝试在我的方法中测试对 ILogger 的调用 public class MyClass private readonly ILogger
  • Python 模拟中的模拟属性?

    我使用起来相当困难mock在Python中 def method under test r requests post http localhost post print r ok prints
  • CSV 提供的数据源第一列中存在奇数字符

    我有一个 CSV 文件 已添加到 Visual Studio 单元测试项目中 它有七列 如下所示 assessmentitemid reviewer1 reviewer2 reviewer3 reviewer4 reviewer5 revi
  • 在 PyCharm 中禁用 Pytest

    如果我有一个以 test 开头的文件 PyCharm 会尝试使用 PyTest 运行该文件 我想正常运行它 作为常规 Python 脚本 我怎样才能做到这一点 Edit请参阅下面 Milo 的回答 如果由于某种原因这对您不起作用 正如 A
  • 如何为 Rust 测试中的所有测试函数创建一个具有作用域/生命周期的变量?

    我有一个在深入测试细节之前初始化变量的测试 我想使用相同的变量进行第二次测试 而不是重复初始化代码 test fn test one let root Path new data the rest of the test test fn t
  • 如何将 OpenCV 的测试框架与 CMake 结合使用?

    好像 OpenCV 有一个测试框架 https github com Itseez opencv tree ef91d7e8830c36785f0b6fdbf2045da48413dd76 modules ts include opencv
  • 使用 Minitest 测试自定义验证器

    我有多个带有电子邮件验证的模型 因此 我将验证提取到自定义验证器中 我按照以下教程做到了这一点导轨指南 http guides rubyonrails org active record validations html custom va
  • 包含routeChangeSuccess的AngularJS测试控制器

    我正在尝试创建单元测试来测试导航列表控制器 但在创建测试时遇到问题 这是控制器的代码 navListModule controller NavListCtrl scope NavList function scope NavList sco
  • 带有 HttpContext 的 ASP.NET MVC 单元测试控制器

    我正在尝试为我的一个控制器编写一个单元测试 以验证视图是否正确返回 但该控制器有一个访问 HttpContext Current Session 的基本控制器 每次我创建控制器的新实例时 都会调用 basecontroller 构造函数 并
  • 何时使用模拟框架?

    因此 我正在使用模拟框架 Moq 进行单元测试 并且想知道何时应该使用模拟框架 以下两个测试之间的优点 缺点是什么 public class Tests Fact public void TestWithMock Arrange var r

随机推荐