запустить тест junit только для одного метода - PullRequest
5 голосов
/ 11 марта 2012

Можете ли вы выполнить тест только для одного метода , а не для всего класса?В идеале из командной строки.

например, для класса:

public class TestClass extends Unittest {
  @Test
  public void test1_shouldbeRun() {

  }

  @Test
  public void test2_shouldNotBeRun() {

  } 
}

Я хочу запустить только метод "test1_shouldBeRun".

Ответы [ 4 ]

4 голосов
/ 11 марта 2012

Я не думаю, что это изначально поддерживается JUnit.Однако у вас есть несколько вариантов:

  1. Поместите необходимые тесты в разные классы, чтобы вы могли запускать их отдельно
  2. Возможно, использование аннотации @Ignore поможет вам.
  3. Если вы используете какую-то IDE, она может поддерживать этот подход.Например, в Eclipse разверните тестовый класс в Package Explorer , выберите метод, который вы хотите запустить, и нажмите Run As -> JUnit test .
  4. Вот довольно обширное руководство о том, как создать пользовательскую TestSuit и задачу Ant, которая может сделать это за вас.
  5. ОБНОВЛЕНИЕ В этой теме ребята говорят, что " Старая утилита junit.textui.TestRunner предоставляет способ запуска одного метода в командной строке через runSingleMethod (), но она не поддерживает аннотированные тестовые классы JUnit4."
1 голос
/ 21 июня 2014

Я сделал пост об этом некоторое время назад.

Это возможно при использовании JUnit 4 и Ant.Хитрость заключается в том, чтобы передать имя метода [s] как свойство в командной строке и использовать другую задачу, если это свойство было передано.

Для данного класса теста:

import org.junit.Test;

public class FooTests {

  @Test
  public void firstTest() {
    System.out.println("test 1");
  }

  @Test
  public void secondTest() {
    System.out.println("test 2");
  }

  @Test
  public void thirdTest() {
    System.out.println("test 3");
  }

}

Создать этофайл ant:

<project default="test">

    <!-- Tell Ant where to find JUnit -->
    <path id="classpath.test">
        <pathelement location="junit-4.11.jar" />
        <pathelement location="hamcrest-core-1.3.jar" />
        <pathelement location="." /> <!-- or where ever your test class file is -->
    </path>
    <target name="test" description="Runs the tests">
        <!-- Set a new Ant property "use-methods" to true if the "test-methods" Ant property - which we'll pass in from the command line - exists and is not blank.-->
        <condition property="use-methods" else="false">
            <and>
                <isset property="test-methods"/>
                <not>
                    <equals arg1="${test-methods}" arg2=""/>
                </not>
            </and>
        </condition>

        <!-- Sanity check -->
        <echo message="use-methods = ${use-methods}"/>
        <echo message="test-methods = ${test-methods}"/>

        <!-- Run the tests -->
        <junit>
            <classpath refid="classpath.test" />
            <formatter type="brief" usefile="false" />
            <!-- The "if" tells JUnit to only run the test task if the use-methods property is true.-->
            <test if="${use-methods}" name="FooTests" methods="${test-methods}"/>
            <!-- The "unless" tells JUnit to not run the test task if the use-methods property is true.-->
            <test unless="${use-methods}" name="FooTests"/>
        </junit>
    </target>
</project>

Примеры

Запустить все тесты.

$ ant
Buildfile: build.xml

test:
     [echo] use-methods = false
     [echo] test-methods = ${test-methods}
    [junit] Testsuite: FooTests
    [junit] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.016 sec
    [junit]
    [junit] ------------- Standard Output ---------------
    [junit] test 3
    [junit] test 1
    [junit] test 2
    [junit] ------------- ---------------- ---------------

BUILD SUCCESSFUL
Total time: 0 seconds

Запустить только второй тест, указав «методы проверки»«Свойство Ant в командной строке.

$ ant -Dtest-methods=secondTest
Buildfile: build.xml

test:
     [echo] use-methods = true
     [echo] test-methods = secondTest
    [junit] Testsuite: FooTests
    [junit] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.009 sec
    [junit]
    [junit] ------------- Standard Output ---------------
    [junit] test 2
    [junit] ------------- ---------------- ---------------

BUILD SUCCESSFUL
Total time: 0 seconds

Запускайте только второй и третий тесты.

$ ant -Dtest-methods=secondTest,thirdTest
Buildfile: build.xml

test:
     [echo] use-methods = true
     [echo] test-methods = secondTest,thirdTest
    [junit] Testsuite: FooTests
    [junit] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.01 sec
    [junit]
    [junit] ------------- Standard Output ---------------
    [junit] test 3
    [junit] test 2
    [junit] ------------- ---------------- ---------------

BUILD SUCCESSFUL
Total time: 0 seconds
0 голосов
/ 28 марта 2019

Это возможно при использовании плагина surefire [1]:

mvn -Dtest=TestClass#test1_shouldbeRun test

[1] http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html

0 голосов
/ 17 мая 2015

есть джутовый плагин , опубликованный в maven central, плагин позволяет выполнять тестовые методы JUnit как внешние разделенные процессы Java, и вы можете определить методы, которые будут включены и исключены из процесса тестирования, и если определить только один метод испытаний включен, тогда будет выполняться только метод испытаний

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...