명령 행에서 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.