我正在为一个方法的行为编写一个单元测试,并希望尝试减少我的代码重复 - 我将再次将测试用例翻倍,并且文件正在获取有点难以看。
如果有人真的感兴趣,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方法并让测试仍然失败(当它失败时)吗?
答案 0 :(得分:3)
没有。在测试运行后,应使用After
方法释放外部资源。另请注意,即使您的Test
方法引发了一个在您的情况下可能不合适的异常,也可以保证运行。
另外,请考虑将来必须维护代码的人员。您通过After
方法验证测试结果,违反了PLA。没有人期望!
如果你创建了一个帮助方法,那会更好。在checkResults
个方法的末尾调用Test
来验证结果。