我正在为一个方法的行为编写一个单元测试,并且想要尝试减少我的代码重复—我要再次将测试用例加倍,并且该文件变得有点难以查看。
如果有人真的对感兴趣,代码在这里(警告未来-链接可能不是永久的)。
现在,我做了下面的事情,以稍微不同的方式重复了几次:
@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));
}
(注:assertThat来自org.hamcrest.Matchers
.)
我知道我可以把"设置容器"和克隆空数组到一个@Before方法。
我的问题是,我可以将assertThat
方法放入@After方法并且测试仍然失败(当它应该失败时)吗?
No。在试运行后,应使用After
方法释放外部资源。另外,请注意,即使您的Test
方法抛出异常(在您的情况下可能不希望出现这种情况),它也可以保证运行。
另外,考虑一下将来必须维护你的代码的人。你们用After
方法验证你们的测试结果,违反了PLA。没人会这样想!
如果你创建一个辅助方法,例如checkResults
,它在每个Test
方法的末尾被调用来验证你的结果,那就更好了。