在 JUnit 4 中重用测试实现?
我有一个接口,例如:
public interface Thing {
FrobResult frob(FrobInput);
}
以及我正在尝试测试的该接口的几个实现(例如,,)。NormalThing
ImmutableThing
AsyncThing
我的许多测试方法实际上是为了确保接口正确实现,因此在每个实现中都是重复的。在 JUnit 3 中,一个常见的解决方案是创建一个基类(扩展),然后由每个实现类子类化。但这是JUnit 4的正确方法吗?Thing
TestCase
(我相信)偏好升序的可能替代方案:
剪切粘贴重复的测试方法。一点也不 DRY,但我想在测试中比在生产代码中更令人担忧。
创建一个包含方法的抽象类,并为每个实现测试类对其进行子类化(在 JUnit 3 测试中很常见 - 这仍然是 JUnit 4 中的好方法吗?
@Test
将常用测试方法放入帮助器类中,并在每个实现上调用它。(组成而不是继承。
执行 #3 的最佳做法是什么?也许是每个实现参数化的测试?还是有更好的方法来实现这一目标?@RunWith(Parameterized.class)