2012-03-11 76 views
2

您是否可以运行单个测试方法而不是整个班级?理想情况下从命令行。仅对单一方法运行测试

例如对于一个类:

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

    } 

    @Test 
    public void test2_shouldNotBeRun() { 

    } 
} 

我只想运行“test1_shouldBeRun”方法。

回答

2

我不认为如果这是由JUnit本机支持。但是,你有一些选择:

  1. 把需要测试在不同的类,所以你也许可以使用@Ignore注释有助于你分开运行
  2. 如果您使用的是一些IDE,它可能支持这种方法。例如在Eclipse中,展开包浏览器中的测试类,选择要运行的方法,然后单击运行方式 - > JUnit测试
  3. Here's a quite extensive tutorial关于如何创建一个自定义TestSuit和一个Ant任务,可以为你做这个。
  4. UPDATEIn this thread的家伙说,“老的junit.textui.TestRunner实用程序提供一种方式来运行的命令行了一个方法,通过runSingleMethod(),但它不支持JUnit4注解测试
+0

谢谢,即使eclipse选项似乎运行的所有类的测试它仍然帮助我。 – forste 2012-03-11 13:22:31

+0

然而,应用程序日志不会被记录到Eclipse控制台,你知道如何指挥它呢? – forste 2012-03-11 13:23:35

+0

显然日志级别以某种方式设置为INFO,因此我遇到类似http://stackoverflow.com/questions/3501355/log4j-output-not-displayed-in-eclipse-console – forste 2012-03-11 13:34:49

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"); 
    } 

} 

创建此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 

通过在命令行上指定“test-methods”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

Jute plugin,发表于行家中部,插件允许执行JUnit测试方法作为外部分离Java进程并且可以定义将被包括在内,从试验过程中排除和方法如果仅定义一个测试方法包括那么只有测试方法将被执行

相关问题