3

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

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

现在,我执行以下操作,以略有不同的方式重复了几次:

@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 方法中并让测试仍然失败(什么时候应该失败)?

4

1 回答 1

3

不可以。该After方法应该用于在测试运行后释放外部资源。另外,请注意,即使您的Test方法引发了您的情况可能不希望出现的异常,它也可以保证运行。

另外,请考虑将来必须维护您的代码的人。通过在方法中验证测试结果,您违反了PLAAfter。没有人预料到!

checkResults如果您创建了一个辅助方法,例如在每个方法的末尾Test调用以验证您的结果,那会更好。

于 2013-03-21T15:36:07.243 回答