2012-03-11 2 views
2

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

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

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

    } 

    @Test 
    public void test2_shouldNotBeRun() { 

    } 
} 

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

ответ

2

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

  1. Поместите необходимые испытания в различных классах, так что вы можете запускать их отдельно
  2. Может быть с помощью @Ignore аннотацию помогает вам.
  3. Если вы используете некоторую среду IDE, она может поддерживать этот подход. Например, в Eclipse разверните тестовый класс в проводнике пакетов , выберите метод, который вы хотите запустить, и нажмите Запустить как -> Тест JUnit.
  4. Here's a quite extensive tutorial о том, как создать пользовательский TestSuit и задачу Ant, которая может сделать это для вас.
  5. UPDATEIn this thread ребята говорят, что "старая утилита junit.textui.TestRunner предоставляет способ для запуска одного метода в командной строке, через runSingleMethod(), но он не поддерживает JUnit4 аннотированный тест классы «
+0

спасибо, хотя опция eclipse, похоже, выполняет все тесты класса, которые она мне все еще помогает. – forste

+0

однако журнал приложений не регистрируется на консоли eclipse, вы знаете, как направить его туда? – forste

+0

, очевидно, уровень журнала как-то установлен в INFO, поэтому у меня возникает проблема, похожая на http://stackoverflow.com/questions/3501355/log4j-output-not-displayed-in-eclipse-console – forste

0

Я сделал post about this некоторое время назад.

Это возможно с использованием 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"); 
    } 

} 

Создать этот муравей файл:

<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-свойство "test-methods".

$ 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

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

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