2016-03-17 2 views
1

У меня есть проблема с Expectations блока я написал в моем тесте:IllegalArgumentException: Invalid условный оператор внутри ожидания блока

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 тха t - false в этом случае.

У меня нет абсолютной подсказки, почему происходит exception. Я уже искал в google, но ничего не нашел.

Не могли бы вы мне помочь?

+0

Можете ли вы показать, как и где вы объявляете и инициализируете 'pWithRealData'? –

+0

Это простой булев. это может быть только 0 или 1, false или true, нет инициализации. Если я не буду передавать логическое значение, я получаю ошибки компиляции. Я передаю false ... –

+0

Почему вы добавляете один дополнительный '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' Есть ли необходимость в этом? это анонимный блок инициализатора или использование для каких-либо других целей? –

ответ

4

Из выпуска JMockit примечания к версии 1.14:

аксессуара: Conditionals и петля теперь будут вызывать исключение, когда находятся внутри блока записи ожидания, чтобы предотвратить неправильное использование API и поощрять более простые тесты. См. Вопрос № 97.

Вопросы GitHub, связанные с этим:

В одном вопросе они утверждают, что:

Да, и это, как чтобы избежать слишком усложняющихся тестов d при записи ожиданий. Полный тест не был показан, но мне кажется, что запись конкретных ожиданий напрямую будет лучше в этом случае.

В JMockit source вы можете видеть, какие другие типы условных обозначений и циклов будут выбрасывать это исключение.

Одним словом, с JMockit 1.14 и далее вам не разрешено иметь условные обозначения (такие как операторы if) и циклы в блоке ожиданий.

+0

вы правы. спасибо –

Смежные вопросы