6

我知道有@Beforeand @BeforeClass,它们用于定义@Test's 的固定装置。但是,如果我需要为每个设备使用不同的固定装置,我应该使用什么@Test

  • 我应该在 中定义夹具 @Test吗?
  • 我应该为每个创建一个测试类@Test吗?

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

4

3 回答 3

14

尖端:

  1. 忘记每个类模式一个测试类,它没有什么优点。每个使用角度切换到一个测试类。从一个角度来看,您可能有多种情况:上限、下限等。为同一类中的那些创建不同的@Test。
  2. 请记住,JUnit 将为每个 @Test 创建一个测试类的实例,因此每个测试将获得一个不同的夹具(由相同的 @Before 方法设置)。如果您需要不同的夹具,则需要不同的测试类,因为您处于不同的视角(参见 1.)
  3. 为特定测试调整夹具并没有错,但您应该尝试保持测试干净,以便它讲述一个故事。当测试失败时,这个故事应该特别清楚,因此每个案例都有不同的、很好命名的 @Test(参见 1.)
于 2010-06-05T11:40:51.013 回答
0

我建议根据您需要的不同夹具创建一个单独的类。如果你有两个不同的灯具,你只需要创建两个不同的类(给他们一个方便的名字)。但我会再次考虑这一点,特别是关于固定装置的差异以及为什么不同。可能您正在进行一种集成测试而不是单元测试?

于 2010-05-03T15:27:02.707 回答
0

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

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

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

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

于 2010-05-28T19:17:40.317 回答