代码之家  ›  专栏  ›  技术社区  ›  Juri Glass

JUnit最佳实践:每个@测试的不同夹具

  •  6
  • Juri Glass  · 技术社区  · 14 年前

    我知道有 @Before @BeforeClass ,用于定义 @Test 但是如果我需要不同的固定装置,我应该用什么呢 @测试 ?

    • 我应该在 @测试 ?
    • 我应该创建一个测试类吗 对于每一个 @测试 ?

    我要求这里的最佳实践,因为我认为这两个解决方案都不干净。使用第一个解决方案,我将测试初始化代码。使用第二个解决方案,我将打破“每个类一个测试类”的模式。

    3 回复  |  直到 12 年前
        1
  •  14
  •   iwein    12 年前

    提示:

    1. 忘记每个类模式一个测试类,它没有什么优点。每个使用透视图切换到一个测试类。在一个透视图中,您可能有多种情况:上边界、下边界等。为同一类中的测试创建不同的@测试。
    2. 请记住,JUnit将为每个@test创建一个测试类实例,因此每个测试都将获得一个不同的fixture(由相同的@before方法设置)。如果您需要一个不同的夹具,那么您需要一个不同的测试类,因为您的视角不同(请参见1)。
    3. 为一个特定的测试调整fixture没有什么错,但是您应该尽量保持测试的整洁,这样它就可以讲述一个故事。当测试失败时,这个故事应该特别清楚,因此每种情况都有不同的、名为@test的测试(见1)。
        2
  •  0
  •   khmarbaise    14 年前

    我建议根据您需要的不同装置创建一个单独的类。如果有两个不同的装置,只需创建两个不同的类(给它们一个方便的名称)。但我会再次考虑这个问题,特别是固定装置的不同以及为什么不同。您是否正在进行一种集成测试而不是单元测试?

        3
  •  0
  •   topchef    14 年前

    如果您确信您的夹具对于单个测试是唯一的,那么它属于 @Test 方法。但这并不典型。可能是它的某些部分是唯一的,或者您没有正确地对其进行参数化/提取,但是通常您会在测试之间共享大量相同的数据。

    最终,夹具是测试的一部分。将夹具放入 @Before 由于测试总是:

    1. 准备测试数据/模拟
    2. 使用SUT执行操作
    3. 验证/断言状态/行为
    4. 销毁测试数据/模拟

    步骤1 @以前 (4) @After )在相关测试中被大量(至少部分)重用。由于Xunit非常重视测试独立性,因此它提供了fixture方法来确保它们始终正常运行,并正确创建/销毁测试数据。