JUnit最佳实践:每个@Test的不同灯具

时间:2010-05-03 15:18:03

标签: junit fixtures

我了解有@Before@BeforeClass,它们用于定义@Test的固定装置。但是,如果我需要为每个@Test设置不同的灯具,我该怎么用?

  • 我应该在中定义灯具 @Test
  • 我应该创建一个测试类 对于每个@Test

我在这里要求最好的做法,因为我认为这两种解决方案都不干净。使用第一个解决方案,我将测试初始化​​代码。在第二个解决方案中,我将打破“每个类别的一个测试类”模式。

3 个答案:

答案 0 :(得分:14)

提示:

  1. 忘记每个类模式的一个测试类,它没有什么优点。从每个使用角度切换到一个测试类。在一个视角中,您可能有多种情况:上边界,下边界等。为同一类中的人创建不同的@Tests。
  2. 请记住,JUnit将为每个@Test创建一个测试类的实例,因此每个测试都将得到一个独特的fixture(由相同的@Before方法设置)。如果你需要一个不同的灯具,你需要一个不同的测试类,因为你的角度不同(见1.)
  3. 为特定测试调整夹具没有任何问题,但您应该尝试保持测试清洁,以便讲述故事。当测试失败时,这个故事应该特别清楚,因此每个案例都有不同的,名称很好的@Test(见1.)

答案 1 :(得分:0)

我建议根据您需要的不同灯具创建一个单独的类。如果你有两个不同的灯具,你需要创建两个不同的类(给它们一个方便的名称)。但我会第二次想到这一点,特别是关于灯具的差异以及为什么会有所不同。可能是你正在进行一种集成测试而不是单元测试?

答案 2 :(得分:0)

如果你肯定你的灯具是单一测试所独有的,那么它属于@Test方法。这不是典型的。可能是它的某些部分是唯一的,或者你没有正确地参数化/提取它,但通常你会在测试之间共享很多相同的数据。

最终夹具是测试的一部分。放置夹具@Before被采用为xUnit模式,因为测试总是:

  1. 准备测试数据/模拟
  2. 使用SUT执行操作
  3. 验证/断言州/行为
  4. 销毁测试数据/模拟
  5. 和步骤1(@Before)和4(@After)在相关测试中重复使用(至少部分)。由于xUnit非常重视测试独立性,因此它提供了fixture方法来保证它们始终运行并正确地测试创建/销毁的数据。

相关问题