В связи с обновлением версии Java с 1.6 на 1.8 на одном из проектов перестал нормально работать древний JMockit. Версия JMockit была очень древней, да и сам проект был старым. Разбираться, почему старая библиотека не работает в новой Java, не очень хочется. Раз уж уже обновили Java, то заодно обновим и JMockit с 0.999.19 на 1.44.
Тут же полезли проблемы:
- В новой версии JMockit нет класса NonStrictExpectations.
- В новой версии JMockit нет аннотации NonStrict.
NonStrictExpectations cannot be resolved to a type
cannot find symbol
symbol: class NonStrictExpectations
Как быть, что делать? Почитал release notes для JMockit. Судя по всему, нужно использовать Expectations вместо NonStrictExpectations и указывать minTimes = 0, а вместо @NonStrict использовать либо аннотацию @Mocked, либо @Injected.
Исходный код:
1 2 3 4 5 6 7 8 9 10 11 12 |
@Test public void test1(@Mocked SomeObject someObject) { new NonStrictExpectations() { @NonStrict SomeObject someObject; { obj1.getDestinationService(); result = dstService; obj1.getNames(); result = Arrays.asList( new String[] {"Vasya", "Petya"}); someObject.getDescription(); result = "My description"; obj1.getSomeObject(); result = someObject; } }; } |
Конечный результат:
1 2 3 4 5 6 7 8 9 10 11 |
@Test public void test1(@Mocked SomeObject someObject) { new Expectations() { { obj1.getDestinationService(); result = dstService; minTimes = 0; obj1.getNames(); result = Arrays.asList(new String[] {"Vasya", "Petya"}); minTimes = 0; someObject.getDescription(); result = "My description"; minTimes = 0 obj1.getSomeObject(); result = someObject; minTimes = 0; } } }; |
Как видим, я заменил @NonStrict на @Mocked и вынес его в параметры, так как в качестве поля он не работает. Я проверял. И в официальной документации нет варианта, где @Mocked используется в качестве поля Expectations. Класс NonStrictExpectations был заменен на Expectations.
Вот так я починил тесты на JMockit при переходе на новую версию. Удаление NonStrictExpectations, конечно, сломало им обратную совместимость.
Да, куски кода в статьи стало сложно вставлять. Нужно чинить Crayon Syntax Highlighter.