명령 행에서 JUnit 테스트 케이스를 실행하는 방법


333

커맨드 라인에서 JUnit 테스트 케이스를 실행하고 싶습니다. 어떻게해야합니까?


비슷한 안드로이드 junit 질문 : stackoverflow.com/q/11144466/611007
n611x007

android docs : 장치 또는 에뮬레이터에서 테스트를 실행합니다 (명령 줄에서). ( andreea.sandu 를 통해 )
n611x007


javac -cp "junit-4.12.jar; hamcrest-core-1.3.jar;." Tests.java나를 위해 일했다. 끝 점에 유의하십시오-중요합니다!
파 섹터

답변:


274

들어 JUnit을 5.x를 그것의 :

java -jar junit-platform-console-standalone-<version>.jar <Options>

https://stackoverflow.com/a/52373592/1431016 에서 간략한 요약을 확인 하고 https://junit.org/junit5/docs/current/user-guide/#running-tests-console-launcher 에서 자세한 내용을 확인하십시오.

대한 의 JUnit 4.X 정말입니다 :

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

그러나 JUnit 3.X를 사용 하는 경우 클래스 이름이 다릅니다.

java -cp .:/usr/share/java/junit.jar junit.textui.TestRunner [test class name]

클래스 파일이있는 JAR 또는 디렉토리를 클래스 경로에 추가하고 세미콜론 (Windows) 또는 콜론 (UNIX / Linux)으로 분리해야합니다. 환경에 따라 다릅니다.

편집 : 예를 들어 현재 디렉토리를 추가했습니다. 환경 및 애플리케이션 빌드 방법에 따라 다릅니다 (bin / 또는 build / 또는 my_application.jar 등일 수 있음). 참고 Java 6 이상은 클래스 경로에서 글로브를 지원합니다.

java -cp lib/*.jar:/usr/share/java/junit.jar ...

도움이 되길 바랍니다. 테스트를 작성하십시오! :-)


@Izap 테스트가 JUnit4를 사용하는지 JUnit3을 사용하는지 프로그래밍 방식으로 결정하는 아이디어가 있습니까?
Goaler444

2
Class.forName 것 같아요. 지난 몇 년 동안 자바에서 프로그래밍을 시작한지 ​​몇 년이 지났습니다.
lzap 11:11

그리고 안드로이드를 사용한다면 어떨까요?
n611x007

1
"-cp"인수 (예 : CLASSPATH)에 대한 문서는 여기 (Java 7, Unix)여기 (Tutorial)여기 (Java 8, Unix)여기 (Java 8, Windows)에 있습니다. 클래스 경로의 와일드 카드가 지원됩니다.
David Tonhofer

1
공감. JUnit 4.x의 경우 올바르지 않습니다. [테스트 클래스 이름]이 (가) 클래스 경로에있는 경우에도 "클래스를 찾을 수 없음 : [테스트 클래스 이름]"이 (가) 제공됩니다.
Philip Rego

117

메이븐 웨이

Maven을 사용하는 경우 다음 명령을 실행하여 모든 테스트 케이스를 실행할 수 있습니다.

mvn clean test

또는 아래와 같이 특정 테스트를 실행할 수 있습니다

mvn clean test -Dtest=your.package.TestClassName
mvn clean test -Dtest=your.package.TestClassName#particularMethod

target \ surefire-reports 폴더의 보고서 파일 대신 콘솔에서 스택 추적 (있는 경우)을 보려면 사용자 특성 surefire.useFile을 false로 설정하십시오. 예를 들면 다음과 같습니다.

mvn clean test -Dtest=your.package.TestClassName -Dsurefire.useFile=false

그래들 방식

Gradle을 사용하는 경우 다음 명령을 실행하여 모든 테스트 사례를 실행할 수 있습니다.

gradle test

또는 아래와 같이 특정 테스트를 실행할 수 있습니다

gradle test --tests your.package.TestClassName
gradle test --tests your.package.TestClassName.particularMethod

자세한 정보를 원하면 --stacktrace 또는 --info 또는 --debug와 같은 옵션을 고려할 수 있습니다.

예를 들어 정보 로깅 수준 --info로 Gradle을 실행하면 실행중인 각 테스트의 결과가 표시됩니다. 예외가 있으면 스택 추적을 표시하여 문제가 무엇인지 지적합니다.

gradle test --info

전체 테스트 결과를 보려면 브라우저에서 보고서를 열 수 있습니다 (예 : 우분투에서 Chrome을 사용하여 보고서 열기).

google-chrome build/reports/tests/index.html

개미 길

Ant 빌드 파일 build.xml을 설정하면 다음과 같이 명령 행에서 JUnit 테스트 케이스를 실행할 수 있습니다.

ant -f build.xml <Your JUnit test target name>

Ant 빌드 파일에서 JUnit 테스트를 구성하는 방법에 대한 자세한 내용을 보려면 아래 링크를 따르십시오. https://ant.apache.org/manual/Tasks/junit.html

정상적인 방법

Maven, Gradle 또는 Ant를 사용하지 않는 경우 다음과 같은 방법을 사용할 수 있습니다.

우선 테스트 사례를 컴파일해야합니다. 예를 들어 (Linux) :

javac -d /absolute/path/for/compiled/classes -cp /absolute/path/to/junit-4.12.jar /absolute/path/to/TestClassName.java

그런 다음 테스트 사례를 실행하십시오. 예를 들면 다음과 같습니다.

java -cp /absolute/path/for/compiled/classes:/absolute/path/to/junit-4.12.jar:/absolute/path/to/hamcrest-core-1.3.jar org.junit.runner.JUnitCore your.package.TestClassName

1
이 답변에는 여러 기술에 대한 예가 있습니다.
Josie Thompson

마지막 접근 방식을 사용한 그루비 테스트는 어떻습니까?
midori

1
그럼 황금 배지를받을 자격)
에릭 Duminil에게

gradle 버전에 감사드립니다! 명성!
ady

52

@lzap이 준 대답은 좋은 해결책입니다. 그러나 추가해야한다고 추가하고 싶습니다. 클래스 경로에 연결하여 현재 디렉토리가 빠지지 않도록하여 자신의 클래스가 제외되도록하십시오. 이것은 일부 플랫폼에서 나에게 일어났다. 따라서 JUnit 4.x의 업데이트 버전은 다음과 같습니다.

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

1
세미콜론이어야합니까?
panny

14
@ panny Windows의 세미콜론입니다. n * nix 환경 (적어도 OSX 및 내가 사용한 모든 Linux 배포판)에서는 콜론을 사용합니다.
rand_acs 2013

1
@rand_acs 테스트 클래스 이름은 완전히 분류 된 클래스 이름이어야합니까?
Goaler444

1
@ Goaler444 예, 항상 모든 네임 스페이스가 지정된 전체 이름을 사용합니다.
rand_acs

22

JUnit.jar이 클래스 경로에 있는지 확인한 후 콘솔에서 명령 행 러너를 호출하십시오.

java org.junit.runner.JUnitCore [테스트 클래스 이름]

참조 : junit FAQ


4
또한 프로젝트의 나머지 클래스 경로를 설정해야합니다.
Thilo

[test class name]이 클래스 경로에있는 경우에도 "클래스를 찾을 수 없음 : [test class name]"을 제공합니다.
Philip Rego

19

JUnit 4.12에서는 다음이 작동하지 않았습니다.

java -cp .:/usr/share/java/junit.jar org.junit.runner.JUnitCore [test class name]

분명히 JUnit 4.11부터 hamcrest-core.jar클래스 경로에 포함시켜야 합니다.

java -cp .:/usr/share/java/junit.jar:/usr/share/java/hamcrest-core.jar org.junit.runner.JUnitCore [test class name]

JUnit 4.12와 동일한 문제가 있습니다. 비슷한 솔루션으로 나왔지만 JUnitCore를로드하지 못했습니다. 클래스 경로에 hamcrest-core.jar을 포함시킬 필요가 없으므로 기본적으로 JUnit 4.8.2로 전환했습니다.
Vladimir Nazarenko

이 작업이 JUnit 4.12로 수행되어야 함을 확인했습니다. +1.
rayryeng

이것은 나를 위해 일했다 :java -cp .:/usr/share/java/junit4.jar org.junit.runner.JUnitCore [test class name]
Raffi Khatchadourian

11

창문에서는

java -cp .;/path/junit.jar org.junit.runner.JUnitCore TestClass [.class 확장자가없는 테스트 클래스 이름]

예를 들어 c:\>java -cp .;f:/libraries/junit-4.8.2 org.junit.runner.JUnitCore TestSample1 TestSample2 ..., 하나 이상의 테스트 클래스가있는 경우 등.

-cp 는 클래스 경로를 나타내며 점 (.)은 기존 클래스 경로를 나타내며 세미콜론 (;)은 위의 예제에서와 같이 추가 주어진 jar을 클래스 경로에 추가합니다. 여기서 우리는 테스트 클래스를 실행하는 데 사용했습니다.

위의 명령 줄 문은 명령 프롬프트 (예 : MSDos)에서 junit (버전 4+) 테스트를 실행하는 데 도움이됩니다.

참고 : JUnitCore는 junit 테스트를 실행하기위한 파사드이며이 파사드는 4+ 버전의 junit에 포함되어 있습니다.


답을 아주 간단하게 설명하십시오.
Mohit Jain

나는 당신의 대답을 간략하게 해달라고 부탁하지 않았습니다. 나는 약간의 설명 (적어도 간단한 설명)을 추가하도록 요청했다. 답이 어떻게 작동하는지 설명하는 것이 좋습니다. 독자들은 그것을 이해하고 그것을 찬성 할 수 있습니다.
Mohit Jain

그래서 보충 테스트 항아리와 바닐라 junit 항아리가 있다면 실제로 작동하려면 java -cp 명령에 두 가지가 있어야합니까? 많은 것을 입력 할 필요가 없도록이 모든 것을 명령 줄에 넣는 방법이 있습니까?
Ungeheuer 2016

5

실제로 Junit 테스트를 실행 가능한 Jar로 만들고 실행 가능한 Jar를 java -jar로 호출 할 수도 있습니다


2
Eclipse에서 JUnit 프로젝트를 마우스 오른쪽 단추로 클릭-> 내보내기 클릭-> Java 선택-> 실행 가능한 jar 파일
Indraneel

4

프로젝트가 Maven 기반 인 경우 다음 명령을 사용하여 'my-module'모듈에 속하는 테스트 클래스 CustomTest에서 모든 테스트 방법을 실행할 수 있습니다.

mvn clean test -pl :my-module -Dtest=CustomTest

또는 다음 명령을 사용하여 테스트 클래스 CustomTest에서 테스트 메소드 myMethod를 1 개만 실행하십시오.

mvn clean test -pl :my-module -Dtest=CustomTest#myMethod

이 기능을 사용하려면 Maven Surefire Plugin v.2.7.3 + 및 Junit 4가 필요합니다. 자세한 내용은 여기 ( http://maven.apache.org/surefire/maven-surefire-plugin/examples/single-test.html)입니다.


4

개인적으로 Maven surefire JUnit 러너를 사용하여 그렇게 할 것입니다.



-1

프로젝트가 개미 기반 인 경우 콘솔에서 다음과 같은 작업을 수행 할 수 있어야합니다.

ant test

이것이 작동하지 않지만 여전히 프로젝트가 개미 기반 ant -p인 경우 프로젝트의 주요 대상을 나열하기 위해 실행할 수 있습니다 .


2
Q는 개미와 아무 관련이 없습니다
accuya

3
그렇기 때문에 "프로젝트가 개미 기반 인 경우"라고 말했습니다. OP는 개미에 대해 알지 못할 수도 있습니다.
cherouvim 2016 년

이 딜레마가 있었는데, 단위 테스트 파일은 일식으로 소스로 표시된 폴더에 없었습니다. 이 프로젝트는 ant를 사용하여 빌드합니다.이 JUnit 테스트를 실행하는 올바른 방법이었습니다.
Andrzej Rehmann
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.