我在测试用例中编写的Expectations
块有问题:
new Expectations() {
{
mFindHandlerMock.findAll((Model) any, (Set<Id>) any, false);
if (!pWithRealData) {
result = Collections.emptySet();
} else {
result = pAllData;
}
times = 1;
Deencapsulation.invoke(mDb, "readSqlQuery", withAny(String.class));
result = "select * from realdata";
times = 1;
}
};
测试用例崩溃:
java.lang.IllegalArgumentException: Invalid conditional statement inside expectation block
正好在这里:
if (!pWithRealData) {
这只是一个简单的boolean
,在这种情况下是false
。
我绝对不知道为什么exception
会发生。
我已经用谷歌搜索过但没有找到任何帮助。
你能帮帮我吗?
答案 0 :(得分:5)
从版本1.14的JMockit发行说明:
增强:条件和循环现在会在期望记录块中找到异常,以防止API滥用并鼓励更简单的测试。请参阅问题#97。
与此相关的GitHub问题:
在一个问题中,他们声明:
是的,这是预期的,以避免在记录期望时测试过于复杂。没有显示完整的测试,但在我看来,在这种情况下直接记录特定的期望会更好。
在JMockit source中,您可以看到哪些其他类型的条件和循环将抛出该异常。
简而言之,从JMockit 1.14开始,不允许在Expectation块中有条件(例如if语句)和循环。