代码之家  ›  专栏  ›  技术社区  ›  Sergey

自动化测试:模拟与创建测试对象图(使用IoC容器),在什么条件下更好?

  •  0
  • Sergey  · 技术社区  · 15 年前

    您如何决定选择什么:

    1. 将模拟对象用于测试或测试
    2. 使用IoC框架创建测试对象/对象图,并对该数据运行测试
    4 回复  |  直到 15 年前
        1
  •  2
  •   Stuart Caborn    15 年前

    • 他们真的,真的很快
    • 它们很小,很容易理解
    • 它们不依赖于更广阔的世界,这使得它们易于运行
    • 它们提供了极好的缺陷定位

    但是,纯单元测试无法告诉您是否在IoC容器中正确配置了对象,数据库连接字符串是否有效等。您需要一个测试,该测试运行IoC容器,并真正接触数据库以证明这些事情。

    例如,我们对容器中的每个服务都有一个(单个)测试,证明我们可以从IoC容器请求它。这证明了我们已经做好了准备,从那时起,我们一直在进行单元测试。我们有很多纯单元测试。

    然后,整个过程被包装在一些应用程序级功能测试中,以证明应用程序本身能够满足用户的需求。

    要记住的是每种测试类型的时间成本。从纯单元移动->有线->功能测试在中断时会花费大量的执行时间和复杂性。

        2
  •  1
  •   Powertieke    15 年前

    对于问题更大的后端连接(目前只有一个ESB调用)或需要复杂状态的函数,我模拟。

        3
  •  1
  •   Lennaert    15 年前

    对于单元测试:如果一个对象不是被测试的对象,则模拟或存根它。 通过这种方式,您可以直接控制它,使其返回所需的数据。

    如果创建测试对象/对象图,则必须 设置它 这样它就提供了您想要的数据。这可能比你想要的要多得多。

    对于集成测试,您当然要一次测试整个对象图。

        4
  •  0
  •   Dror Helper    15 年前

    如果您需要编写大量初始化代码,模拟框架可能会帮助您编写更好、易于理解的单元测试。