2013-06-27 2 views
6

Возможно, что я схожу с ума, но сегодня утром, когда я обновился до Eclipse Kepler, я попытался выполнить единичные тесты для нескольких проектов Eclipse одновременно и не удалось. Я выбрал несколько проектов, открыл меню правой кнопки мыши и опции «Запуск от ...» исчез.Выполнение тестов JUnit из нескольких проектов в Eclipse

«Проклятый Кеплер!» Я подумал и запустил мою старую установку Juno, чтобы убедить себя, что поведение изменилось. Однако он тоже не работал.

Теперь я задаю себе вопрос о том, действительно ли это возможно. Manyother Вопросы переполнения стека и другие sites предполагают, что это сложная, если не невозможная задача. Тем не менее, я так уверен, что делаю это в недавнем прошлом, что это немного меня задрожало.

Итак ... это возможно даже в Кеплере или Юноне? Может ли кто-нибудь предложить популярный плагин, который мог бы включить эту функцию (которую я неправильно принял по умолчанию)?

Справочная информация: У меня есть мультимодульный проект Maven, управляемый через m2e, и я ожидал, что смогу выбрать несколько проектов и выполнить все модульные тесты.

+0

У вас все еще есть доступные конфигурации? Если это так, просто создайте для него конфигурацию и запустите ее. – JREN

+0

@JREN К сожалению, опция «Запуск конфигурации ...» все еще существует. Но если я поеду по этому маршруту, я могу запускать тесты только для одного проекта, а не для нескольких проектов. –

+0

Должна быть доступна радиокнопка, в которой говорится: «Запустите все тесты в выбранной проектной, пакетной или исходной папке:« Если у вас выбрано 2 проекта, он должен выполнить все модульные тесты для обоих. Это работает для меня хотя бы: - /. Я использую Eclipse Juno – JREN

ответ

1

Вы не можете запускать тесты для нескольких проектов в Eclipse, по крайней мере, используя обычные бегуны. Есть, однако, целый ряд вариантов:

  1. Создать муравей скрипт/Maven, который управляет всем
  2. Если вы хотите запустить тесты каждый раз, когда вы сохраняете, вы можете использовать Infinitest.

С сайта Infinitest:

Infinitest является непрерывное тестирование плагин для Eclipse, и IntelliJ. Каждый раз, когда происходит изменение исходного кода, Infinitest запускает все тесты, которые могут быть неудачными из-за этих изменений.

Infinitest может потенциально запускать все тесты во всех проектах.

5

Вы можете выполнить тесты JUnit для нескольких проектов, используя Classpath Suite. В общем все, что вам нужно сделать, это:

  1. Создание проекта Eclipse, в зависимости от всех проектов, которые вы хотите проверить.
  2. Написать пакет:

    @RunWith (ClasspathSuite.class)
    общественного класса MySuite

Посмотрите на эту статью: Roger Rabbit - JUnit Tests Runner Across Multiple Projects, она включает в себя шаг за шагом пример и образец кода.

1

Если вы, вместо того чтобы использовать контекстное меню, с помощью сочетания клавиш (по умолчанию = Alt-Shift-XT), вы получите следующий диалог:

enter image description here

Это намек о том, почему Затмении не отображает опцию в меню - он считает, что тестов нет. Это явно неправильно.

Рытье через Eclipse source code for JUnitLaunchShortcut (строки 160-191), я нашел это:

private void launch(Object[] elements, String mode) { 
    try { 
     IJavaElement elementToLaunch= null; 

     if (elements.length == 1) { 
... 
     } 
     if (elementToLaunch == null) { 
      showNoTestsFoundDialog(); 
      return; 
     } 

Он работает только при выборе ровно один тестового класса.

Видимость опция меню управляется с помощью конфигурации org.eclipse.jdt.junit плагинов (plugin.xml), и который имеет такую ​​же проблему (строки 221-234):

<contextualLaunch> 
    <enablement> 
     <with variable="selection"> 
      <count value="1"/> 
      <iterate> 
       <adapt type="org.eclipse.jdt.core.IJavaElement"> 
        <test property="org.eclipse.jdt.core.isInJavaProject"/> 
        <test property="org.eclipse.jdt.core.hasTypeOnClasspath" value="junit.framework.Test"/> 
        <test property="org.eclipse.jdt.junit.canLaunchAsJUnit" forcePluginActivation="true"/> 
       </adapt> 
      </iterate> 
     </with> 
    </enablement> 
</contextualLaunch> 

<count value="1"/> немного вначале действует как селектор, и это означает одно и то же: у вас должно быть точно один выбранный пункт, или пункт меню не будет отображаться.

Я думаю, что мы нашли проблему :)

Я также проверил историю файлов как для них, и они не были изменены с сентября 2006 г. Таким образом, если вам удалось сделать это с более новой версией вы, скорее всего, установили какой-то плагин, который позволит вам это сделать.

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