使用@Rule删除样板测试代码

时间:2012-08-03 18:12:35

标签: java junit junit4

我正在编写测试,并且意识到他们在开始时都非常相似:

@Test
public void testThisMemoryOperation() {
    Assert.assertEquals("Sanity check failed, shouldn't be anything in memory yet.",
            0, memoryManager.getObjectsInMemory());
    /* ... */
}

@Test
public void testThatMemoryOperation() {
    Assert.assertEquals("Sanity check failed, shouldn't be anything in memory yet.",
            0, memoryManager.getObjectsInMemory());
    /* ... */
}

@Test
public void testTheOtherMemoryOperation() {
    Assert.assertEquals("Sanity check failed, shouldn't be anything in memory yet.",
            0, memoryManager.getObjectsInMemory());
    /* ... */
}

这似乎是不必要的重复。我可以在每个测试开始时用一个简单的方法调用替换此代码来运行完整性检查断言,但是有一个像@Rule这样的本机JUnit注释,我可以在运行某些方法之前简单地运行这个测试吗?

3 个答案:

答案 0 :(得分:3)

为什么不创建一个简单的方法并只是调用它?类似的东西:

private void test() {
    Assert.assertEquals("Sanity check failed, shouldn't be anything in memory yet.", 0, memoryManager.getObjectsInMemory());
}

答案 1 :(得分:0)

为什么不将此方法放在基类中并在测试中扩展该类?它每次都会自动运行(至少使用TestNG,但我认为JUnit也支持继承)。

答案 2 :(得分:0)

如果Verifier Rule添加了一个检查后的语句,那么您的距离最近。你看一下source使PreconditionRule变得非常简单。