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



我正在为一个方法的行为编写一个单元测试,并且想要尝试减少我的代码重复—我要再次将测试用例加倍,并且该文件变得有点难以查看。

如果有人真的对感兴趣,代码在这里(警告未来-链接可能不是永久的)。

现在,我做了下面的事情,以稍微不同的方式重复了几次:

@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方法的末尾被调用来验证你的结果,那就更好了。

最新更新