我可以在@After方法中放置单元测试结果验证吗?

时间:2013-03-21 15:28:24

标签: java unit-testing junit

我正在为一个方法的行为编写一个单元测试,并希望尝试减少我的代码重复 - 我将再次将测试用例翻倍,并且文件正在获取有点难以看。

如果有人真的感兴趣,the code is here(警告未来 - 链接可能不是永久性的。)

现在,我做了以下几点,重复了几次:

@Test
public void testAdd64OfMax64() {
    // Set up container
    TileEntityChest nmsinv = new TileEntityChest();
    Inventory container = new CraftInventory(nmsinv);
    // Call method
    HashMap<Integer,ItemStack> leftover = container.addItem(new ItemStack(Foo, 64));
    // Set up expected result
    ItemStack[] expected = empty.clone();
    expected[0] = new ItemStack(Foo, 64);
    // Verify result
    assertThat(container.getContents(), is(expected));
    assertThat(leftover, is(Collections.EMPTY_MAP));
}

(注意:断言来自org.hamcrest.Matchers。)

我知道我可以把“设置容器”并将空数组克隆到@Before方法中。

我的问题是,我可以将assertThat方法放入@After方法并让测试仍然失败(当它失败时)吗?

1 个答案:

答案 0 :(得分:3)

没有。在测试运行后,应使用After方法释放外部资源。另请注意,即使您的Test方法引发了一个在您的情况下可能不合适的异常,也可以保证运行。

另外,请考虑将来必须维护代码的人员。您通过After方法验证测试结果,违反了PLA。没有人期望!

如果你创建了一个帮助方法,那会更好。在checkResults个方法的末尾调用Test来验证结果。