maven으로 단일 테스트 방법 실행


519

다음을 사용하여 특정 클래스에서 모든 테스트를 실행할 수 있다는 것을 알고 있습니다.

mvn test -Dtest=classname

그러나 개별 메서드를 실행하고 싶습니다 -Dtest = classname.methodname이 작동하지 않는 것 같습니다.


3
이 작업을 수행하는 방법도 알고 싶습니다. 그러나 내가 자주하는 일을 발견하면 테스트가 자체 클래스로 분리 될 수 있다고 생각하므로 mvn test -Dtest=classname구문을 사용할 수 있습니다 .
John Paulett 2009

커맨드 라인을 통해서만 수행하는 방법을 알고 싶습니까? 아니면 IDE (일식)를 사용하면 효과가 있습니까?
Diego Dias

1
명령 줄을보고있었습니다. junit eclipse 플러그인을 사용하면이 작업을 수행 할 수 있다고 생각합니다.
BillMan

나는 Maven 1을 위해 이것을했다. 내가 기억했던 것처럼, 테스트 클래스를 조사하는 JUnit을 변경하는 것이 포함되었다.
kdgregory

답변:


698

Maven에서 단일 테스트 방법을 실행하려면 다음과 같이 명령을 제공해야합니다.

mvn test -Dtest=TestCircle#xyz test

여기서 TestCircle테스트 클래스 이름 xyz은 테스트 방법입니다.

와일드 카드 문자도 작동합니다. 메소드 명과 클래스 명 모두.

다중 모듈 프로젝트에서 테스트하는 경우 테스트가 포함 된 모듈을 지정하십시오 -pl <module-name>.

통합 테스트의 경우 다음 it.test=...대신 옵션을 사용하십시오 test=....

mvn -pl <module-name> -Dit.test=TestCircle#xyz integration-test

4
고정 2.9을 확실한으로 다운 그레이드하여 오류를 "아니오 테스트가 실행 된"
쿼티을

15
"테스트가 실행되지 않았습니다!"를 수정했습니다. 2.14로 업그레이드하여 :
alfonx

54
다중 모듈 프로젝트에서 테스트하는 경우 테스트가 포함 된 모듈도 지정해야합니다 -pl <module-name>.
Jon

22
-DfailIfNoTests=false테스트없이 프로젝트를 건너 뛰는 데 사용 합니다. No Tests Were Executed루트 프로젝트에서 테스트를 실행하려고 시도하고 테스트가없는 모듈이있을 때 발생합니다.
Cherry

4
이 명령은 작동합니다 !! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test "-DTest"는 대문자 CAS 'T'로 시작합니다.
vikas

25

surefire 2.12에 문제가 있습니다. 이것은 maven-surefire-plugin을 2.12에서 2.11로 변경하면 발생합니다.

  1. mvn test -Dtest=DesignRulesTest

    결과 :
    [오류] 프로젝트 pmd에서 목표 org.apache.maven.plugins : maven-surefire-plugin : 2.12 : test (기본 테스트) 를 실행하지 못했습니다 : 테스트가 실행되지 않았습니다!

  2. mvn test -Dtest=DesignRulesTest

    결과 : [정보] --- maven-surefire-plugin : 2.11 : test (기본 테스트) @ pmd --- ... 실행 중 net.sourceforge.pmd.lang.java.rule.design.DesignRulesTest 테스트 실행 : 5 , 실패 : 0, 오류 : 0, 건너 뛰기 : 4, 경과 시간 : 4.009 초


5
2.12.1 이상에서 다시 작동합니다.
yurez

"테스트가 실행되지 않았습니다!"수정 2.14로 업그레이드
alfonx

을 사용 @Category(IntegrationTest.class)하면을 사용 -Dit.test=ClassName하고 그렇지 않으면 No tests were executed!최신 플러그인 버전을 사용할 수 있습니다.
uvsmtid

16

TestNG로 수행하는 작업 (죄송합니다, JUnit은 이것을 지원하지 않습니다) 테스트 사례는 실행하려는 테스트에 그룹을 할당 할 수 있다는 것입니다

@Test(groups="broken")

그런 다음 'mvn -Dgroups = broken'을 실행하십시오.


1
이것은 좋은 대답입니다. 필자의 경우 테스트가 실행되었지만 일부 Seam 구성 요소가 제대로 설정되지 않아 설정 코드의 일부를 건너 뛰는 것처럼 보입니다.
Chris Williams

1
옳은. @BeforeMethod에 groups = broken을 넣거나 @BeforeMethod (alwaysRun = true)
tunaranch

컴파일 문제가 발생하여 여기에 그룹이 무엇인지 알려주십시오.
Paramesh Korrakuti

14

단일 테스트 클래스에서 메소드 세트 실행 버전 2.7.3에서는 단일 테스트 클래스에서 n 개의 테스트 만 실행할 수 있습니다.

참고 : junit 4.x 및 TestNG에서 지원됩니다.

다음 구문을 사용해야합니다

mvn -Dtest=TestCircle#mytest test

패턴도 사용할 수 있습니다

mvn -Dtest=TestCircle#test* test

surefire 2.12.1부터 여러 방법을 선택할 수 있습니다 (현재 JUnit4X, 패치는 환영합니다)

mvn -Dtest=TestCircle#testOne+testTwo test

단일 테스트에 대한링크를 확인하십시오


2
내 경우에는 mvn -Dtest = "TestCircle # myTest"테스트와 같은 TestClass # test 이름을 큰 따옴표로 묶어야했습니다
Pratik Khadloya

@PratikKhadloya 종속 테스트에서 어떻게 작동하는지 아십니까? TestClass에 test1 (), test2 (), test3 () 메소드가 있고 test2가 test1에 의존한다고 가정 해보십시오. test2 () 만 어떻게 실행할 수 있습니까?
Ziska

3
당신이 당신의 테스트 사이에 의존성이 있다면, 당신은 뭔가 잘못하고 있다고 생각합니다. 각 테스트는 다른 테스트와 독립적이어야합니다. 그들 사이의 커플 링을 제거해야합니다.
Pratik Khadloya

11

다음 구문을 사용하여 특정 테스트 클래스 및 메소드를 실행할 수 있습니다.

  1. 전체 패키지 : mvn test -Dtest = "com.oracle.tests. **"

  2. 클래스의 모든 메소드 : mvn test -Dtest = CLASS_NAME1

  3. 단일 클래스의 단일 메소드 : mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1

  4. 여러 클래스의 여러 메소드 : mvn test -Dtest = CLASS_NAME1 # METHOD_NAME1, CLASS_NAME2 # METHOD_NAME2


10

이 명령은 작동합니다 !! mvn "-DTest=JoinTeamTestCases#validateJoinTeam" test"-DTest"는 대문자 CAS 'T'로 시작합니다.


4
않습니다 하지 확실한 2.18.x와 함께 작동; 모든 테스트를 실행합니다.
Janaka Bandara

4

테스트 tobrien 언급 매개 변수는 당신이 사용하는 방법을 지정할 수 있습니다 #을 메소드 이름 앞에합니다. 이것은 JUnit 및 TestNG에서 작동합니다. 나는 그것을 시도하지 않았습니다, 그냥 Surefire 플러그인 페이지 에서 읽으십시오 :

포함 / 제외 매개 변수를 대체하여 파일 이름으로 개별 테스트를 실행하려면이 매개 변수를 지정하십시오. 여기서 지정한 각 패턴은 ** / $ {test} .java와 같은 형식의 포함 패턴을 작성하는 데 사용되므로 "-Dtest = MyTest"를 입력하여 "foo / MyTest.java"라는 단일 테스트를 실행할 수 있습니다. 이 매개 변수는 include / excludes 매개 변수 및 TestNG suiteXmlFiles 매개 변수를 대체합니다. 2.7.3부터 #myMethod 또는 # my * ethod를 추가하여 테스트에서 제한된 수의 메소드를 실행할 수 있습니다. junit 4.x 및 testNg에 대해 Si 유형 "-Dtest = MyTest # myMethod"지원


3

JUnit의 새 버전에는 카테고리 러너가 포함되어 있습니다. http://kentbeck.github.com/junit/doc/ReleaseNotes4.8.html

그러나 JUnit의 릴리스 절차는 maven을 기반으로하지 않으므로 maven 사용자는 수동으로 저장소에 저장해야합니다.


1
좋은. 그러나 이것이 어떻게 질문에 대답하는지 알 수 없습니다.
Pascal Thivent

2
Subj는 maven-surefire-plugin 2.7.3 버전에서 지원됩니다 : maven.apache.org/plugins/maven-surefire-plugin/examples/…
Andriy Plokhotnyuk

3

surefire 플러그인 버전 2.22.1 (아마 이전 버전)부터 testng.xml을 사용할 때 testnames 속성을 사용하여 단일 테스트를 실행할 수 있습니다

다음 testng.xml이 주어지면

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE suite SYSTEM "http://testng.org/testng-1.0.dtd">
<suite name="Suite">
    <test name="all-tests">
        <classes>
            <class name="server.Atest"/>
            <class name="server.Btest"/>
            <class name="server.Ctest"/>
        </classes>
    </test>
    <test name="run-A-test">
        <classes>
            <class name="server.Atest"/>
        </classes>
    </test>
    <test name="run-B-test">
        <classes>
            <class name="server.Btest"/>
        </classes>
    </test>
    <test name="run-C-test">
        <classes>
            <class name="server.Ctest"/>
        </classes>
    </test>
</suite> 

pom.xml로

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    [...]
    <properties>
        <selectedTests>all-tests</selectedTests>
    </properties>
    [...]
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.1</version>
            <configuration>
                <suiteXmlFiles>
                    <file>src/test/resources/testng.xml</file>
                </suiteXmlFiles>
                <properties>
                    <property>
                        <name>testnames</name>
                        <value>${selectedTests}</value>
                    </property>
                </properties>
            </configuration>
        </plugin>
    </plugins>
    [...]
</project>

명령 행에서

mvn clean test -DselectedTests=run-B-test

추가 자료 -testng를 사용한 Maven surefire 플러그인


-5

테스트 클래스 내에서는 단일 테스트 클래스를 실행할 수 있지만 단일 메서드는 실행할 수 없습니다. 정규화 된 클래스 이름이 아닌 간단한 클래스 이름을 사용합니다. 따라서 "org.sonatype.test.MyTest"에 테스트가 있고 실행하려는 유일한 테스트 인 경우 명령 행은 다음과 같습니다.

mvn test -Dtest=MyTest

단일 모듈 프로젝트에서 이전 주석에 설명 된 솔루션을 테스트 했으므로이 의견이 말하는 것은 사실이 아닙니다.
tonio

5
2009 년에 원래 답변했을 때 사실 일 수 있습니다.
flurdy

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.