我有一个对象,我在我的测试类的NonStrictExcpection()
/ @Before
方法中使用JMockit setUp()
进行模拟,以便它返回正常执行我的预期值被测试的课程。
这适用于我的所有测试方法,除了我想测试此代码的非正常操作的单个测试。
我尝试在测试方法中创建一个新的期望,我认为它会覆盖setUp方法中的期望,但我发现setUp方法中的期望抑制了新的期望。
当我删除setUp期望时,测试方法的行为与预期一致(但我所有其他测试自然都失败了。)
我应该如何对我的测试类进行编码,以便能够以最少的代码量为每个测试正确定义期望?(我知道我可以将期望代码复制/粘贴到每个测试中方法,但我不想这样做如果完全可以避免的话。)
我的测试代码看起来像这样(注意,这是 sorta psuedocode 并且没有编译,但你明白了):
public class TestClass{
@Before
public void setUp(){
// Here I define the normal behaviour of mockObject
new NonStrictExpectations() {{
mockObject.doSomething();
result = "Everyting is OK!";
}};
// Other set up stuff...
}
// Other Tests...
/**
* This method tests that an error when calling
* mockObject.doSomething() is handled correctly.
*/
@Test(expected=Exception.class)
public void testMockObjectThrowsException(){
// This Expectation is apparently ignored...
new NonStrictExpectations() {{
mockObject.doSomething();
result = "Something is wrong!";
}};
// Rest of test method...
}
}
答案 0 :(得分:6)
我通常只创建一个返回Expectations
类型的私有方法:
private Expectations expectTheUnknown()
{
return new NonStrictExpectations()
{{
... expectations ...
}};
}
然后只需在需要精确期望的测试方法中调用该方法:
@Test public void testUknown()
{
expectTheUnknown();
... here goes the test ...
}
答案 1 :(得分:0)
您可以更好地使用MockUp进行基于状态的测试。在每个测试方法中定义所需的样机。您可以调用MockUp的tearDown方法在每次测试结束时删除模拟。