我不知道为什么,但我总是写这样的JMock测试:
@Test
public void testMyThing() throws Exception {
mockery.checking(new Expectations() {{
oneOf(mockObj).foo();
}});
testObj.bar(); // calls mockObj.foo()
mockery.assertIsSatisfied();
}
但是当有很多测试的时候,将assertIsSatisfied
移到拆除位置会更好吗?
@After
public void tearDown() throws Exception {
mockery.assertIsSatisfied();
}
答案 0 :(得分:5)
建议的方法是使用JMock运行程序。使用
注释类@RunWith(JMock.class)
public class TestClass {
这将在测试生命周期中的正确位置调用断言。拆解不是正确的地方,因为可能无法正确报告故障,并可能搞乱其他清理工作。
我们在存储库中也有一个与新的@Rule基础架构配合使用的嘲弄规则。
答案 1 :(得分:0)
是的,我倾向于在拆解时这样做。它将各个测试方法的重点放在他们实际测试的内容上,方法是将样板删除到@After
中 - 对我来说,测试尽可能具有表现力和可读性至关重要。
事实上,我有时会更进一步,并使用JMockSupport
基类为我处理Mockery
(以及提供mock(...)
的便利实现)。当然,这只是一种便利,绝不是像JUnit 3中那样的要求。