1

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会发生这种情况。我已经用谷歌搜索过,但没有发现任何帮助。

你可以帮帮我吗?

4

1 回答 1

5

来自 1.14 版的 JMockit 发行说明:

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

与此相关的 GitHub 问题:

在一个问题中,他们指出:

是的,这符合预期,以避免在记录期望时测试变得过于复杂。没有显示完整的测试,但在我看来,在这种情况下直接记录具体期望会更好。

在 JMockit源代码中,您可以看到哪些其他类型的条件和循环会抛出该异常。

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

于 2016-03-17T09:10:10.097 回答