IllegalArgumentException:期望块内的条件语句无效

Ste*_*ike 1 java junit jmockit expectations illegalargumentexception

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;
      }
    };
Run Code Online (Sandbox Code Playgroud)

测试用例崩溃:

java.lang.IllegalArgumentException: Invalid conditional statement inside expectation block
Run Code Online (Sandbox Code Playgroud)

正好在这里:

if (!pWithRealData) {
Run Code Online (Sandbox Code Playgroud)

它只是一个简单的boolean就是false在这种情况下.

我绝对不知道为什么exception会发生这种情况.我已经用谷歌搜索过但没有找到任何帮助.

你可以帮帮我吗?

Wil*_*eez 5

从版本1.14的JMockit发行说明:

增强:条件和循环现在会在期望记录块中发现异常,以防止API滥用并鼓励更简单的测试.见问题#97.

与此相关的GitHub问题:

在一个问题中,他们声明:

是的,这是预期的,以避免在记录期望时测试过于复杂.没有显示完整的测试,但在我看来,在这种情况下直接记录特定的期望会更好.

在JMockit 源代码中,您可以看到哪些其他类型的条件和循环将引发该异常.

简而言之,从JMockit 1.14开始,不允许在Expectation块中具有条件(例如if语句)和循环.