JMockit javaagent не инициализирует JMockit

Я настроил JMockit для использования с некоторыми тестами JUnit, также использующими Robolectric, но получаю ошибки. Я в основном использую maven для запуска тестов.

Когда я запускаю тест с mvn test и javaagent, настроенным как указано, здесь я получаю обычное исключение:

java.lang.IllegalStateException: JMockit не был правильно инициализирован; убедитесь, что jmockit.jar предшествует junit.jar в пути к классам (при использовании JUnit; если нет, проверьте документацию)

Я проверил, что JMockit находится в пути к классам до JUnit, используя mvn dependency:build-classpath и mvn test --debug. Я также проверил, что аргумент -javaagent правильно вызывается с использованием mvn test --debug.

Версии библиотеки:

  • JDK 1.6
  • JMockit 1.5
  • Юнит 4.8.2
  • Robolectric 2.2 Robolectric runner не позволяет мне использовать JMockit runner.
  • Мавен 3.0.3
  • Верный огонь 2.14.1

Тестовый класс следующий:

@RunWith(RobolectricTestRunner.class)
public class HelpFragTest {

    FragmentActivity activity;
    FragmentManager fragmentManager;
    @Mocked ActionBarManager actionBarManager;

    @Before
    public void setup() throws Exception {
        activity = Robolectric.buildActivity(FragmentActivity.class).create().resume().get();
        fragmentManager = activity.getSupportFragmentManager();
        MyApplication.instance().setActionBarManager(actionBarManager);
    }

    @Test
    public void testShow(){
        new NonStrictExpectations() {{
            Helper.staticMethod(anyString, anyString);
            actionBarManager.clear();
            actionBarManager.setTitle(anyString);
            actionBarManager.refresh();
        }};
        HelpFrag frag = HelpFrag.newInstance();
        FragmentTransaction transaction = fragmentManager.beginTransaction();
        transaction.add(frag, StringUtils.EMPTY);
        transaction.commit();

        assertTrue(frag.isVisible());

    }
}

Я также пробовал без явного бегуна или JavaAgent, и в этом случае я получаю следующее исключение из того же кода:

java.lang.IllegalStateException: недопустимое место для записи ожиданий


person C. Ross    schedule 19.12.2013    source источник
comment
Связанный вопрос: java.lang.NoSuchMethodException с JMockit 1.5 и Robolectric 2.2.   -  person C. Ross    schedule 31.12.2013


Ответы (2)


Я столкнулся с той же проблемой, и проблема, похоже, в том, что средство запуска тестов Robolectric мешает интеграции JMockit-JUnit. См. это.

person Ignacio Martin    schedule 23.12.2013
comment
Кажется, мы с вами сталкиваемся со многими одинаковыми проблемами. Если у вас есть возможность, присоединяйтесь ко мне в модульном тестировании Android. Если меня там нет, просто используйте @C.Ross, чтобы пропинговать меня. - person C. Ross; 31.12.2013

СИМПТОМ: ошибка при запуске maven с Jmockit и junit в проект java.

СООБЩЕНИЕ: JMockit не был правильно инициализирован; убедитесь, что jmockit.jar предшествует junit.jar в пути к классам (при использовании JUnit; если нет, проверьте документацию)

ПРИЧИНЫ:

Неправильно настроен в файле POM.xml. Зависимость Jmockit находится после junit.

РЕШЕНИЯ:

Отредактируйте файл POM.xml. jmockit.jar должен предшествовать junit.jar, тогда зависимость jmockit должна быть перед junit.

(всегда ставьте jmockit перед junit)

person Dario Palminio    schedule 06.06.2015