запустить все тесты, помеченные @Ignore - PullRequest
3 голосов
/ 08 марта 2012

Я хочу выполнить задание Jenkins для запуска задачи ant для запуска всех тестов в моей кодовой базе, помеченных @Ignore, потому что использование аннотаций, таких как @Category (IgnoredTest.class), не работает с нашим распараллеливанием запуска теста.После долгих поисков это выглядит невозможно, но у меня все еще есть надежда.Помогите?

JUnit 4.10

Ответы [ 2 ]

0 голосов
/ 21 апреля 2012

Я не уверен, что мешает вашей «параллелизации тестового прогона», но вы могли бы сделать это с помощью правила, если хотите использовать пользовательскую аннотацию «игнорировать» вместо JUnit. Причиной этого является то, что JUnit обрабатывает тесты @Ignored на уровне Runner, особенно в BlockJUnit4ClassRunner.runChild() (по умолчанию). Если бы вы могли найти способ использовать пользовательский Runner в Ant, вы могли бы найти его, чтобы довольно легко удовлетворить ваши потребности, но я не знаю, легко ли это сделать в Ant.

Как я уже упоминал, вы можете легко использовать другую аннотацию и правило для выбора методов для запуска. Я составил быстрый пример такого правила для github вместе с тестом, который использует его . В моем маленьком примере для переключения используется системное свойство, но вы также можете явно включить его для всего, о чем вы можете подумать, что вы можете получить здесь.

Вы можете клонировать и запустить этот пример с помощью:

git clone git@github.com:zzantozz/testbed tmp
cd tmp
mvn test -pl stackoverflow/9611070-toggleable-custom-ignore -q
mvn test -pl stackoverflow/9611070-toggleable-custom-ignore -q -D junit.invertIgnores

Единственным недостатком этого подхода, о котором я могу подумать, является то, что ваши тесты не будут должным образом помечены как «игнорируемые», потому что это также делается методом BlockJUnit4ClassRunner.runChild(), и если вы посмотрите на ParentRunner.runLeaf() (которому делегируется runChild()), вы увидите, что уведомитель, то, что вам нужно, чтобы сообщать об игнорируемых тестах, не передается достаточно далеко, чтобы использовать его в правиле. Опять же, для этого вам понадобится пользовательский Runner.

0 голосов
/ 20 апреля 2012

Вы можете создать специальную цель муравья, которая удаляет аннотацию @Ignore и добавляет аннотацию @ignore к любому активному аннотированному методу @Test

цель будет выглядеть примерно так:

<project name="anyname" default="test" basedir=".">
   ..
   ..
  <target name="enable-ignored-test" depends="copy-code-to-replace-ignored">
     <fileset id="fsTestCase" dir="." includes="**/*Test.java">
      </fileset>

      <replaceregexp flags="gm">
            <regexp pattern="^@Ignore"/>
            <substitution expression=""/>
            <fileset refid="${fsTestCase}"/>
      </replaceregexp>

      <replaceregexp flags="gm">
            <regexp pattern="@Test"/>
            <substitution expression="@Ignore @Test"/>
            <fileset refid="${fsTestCase}"/>
      </replaceregexp>  
   </target>

   <target name="run-ignored-tests" depends="enable-ignored-test,test" />

   ..
   ..
 </project>
...