[java] Junit 단위 테스트를위한 JVM 매개 변수를 설정하는 방법은 무엇입니까?

실행하는 데 많은 양의 힙 공간이 필요한 Junit 단위 테스트 (예 : 1G)가 있습니다. (충분한 힙 공간으로 만 실행되고 Win 7 64 비트 컴퓨터에서 내부적으로 실행되는 웹 스타트 앱의 메모리 집약적 기능을 테스트하므로 테스트를 재 설계하는 것은 실용적인 제안이 아닙니다.)

Intellij IDEA에서 개발 중이므로 테스트 클래스에 대해 JVM 매개 변수 (예 : -Xmx1024M)를 설정할 수 있다는 것을 알고 있습니다. 그러나 이것은 전체 테스트 클래스를 실행하기위한 것입니다. 개별 테스트를 실행하려면 해당 테스트 메서드에 대한 실행 구성을 다시 만들어야합니다.

또한 이들은 IDE 및 상자별로 다르므로 상자를 전환하거나 (여러 컴퓨터에서 개발) 동료 중 한 명이 테스트를 실행하려고하면 해당 설정이 전송되지 않습니다. (또한 Eclipse 및 NetBeans와 같은 다른 IDE는 동료들이 사용합니다.) FWIW, 소스 코드 제어를 위해 mercurial을 사용하고 있습니다.

빌드주기의 경우 Maven을 사용하므로 이에 대한 JVM 매개 변수를 지정하는 방법을 알고 있습니다.

그래서 :-전체 테스트 클래스와 개별 테스트 메서드에 적용 할 JVM 매개 변수를 지정하는 방법을 찾고 있습니다. 그리고-모든 컴퓨터의 IDE에서 이러한 사양을 공유하고 싶습니다 (저장소에서 코드를 가져옴).



답변

IntelliJ에서는 각 실행 구성에 대한 기본 설정을 지정할 수 있습니다. 에서 실행 / 디버그 구성 대화 상자 (당신이 테스트 당 구성 힙을 사용하는 한) 클릭 기본값JUnit을 . 이러한 설정은 각각의 새로운 JUnit 테스트 구성에 자동으로 적용됩니다. Eclipse에도 비슷한 설정이 존재한다고 생각합니다.

그러나 이러한 설정 (적어도 IntelliJ에서는)을 환경간에 전송하는 간단한 옵션이 없습니다. IntelliJ 프로젝트 파일을 저장소에 커밋 할 수 있습니다. 작동 할 수도 있지만 권장하지는 않습니다.

에 대해 설정하는 방법을 알고 maven-surefire-plugin있습니다. 좋은. 이것은 가장 이식 가능한 방법입니다 (예는 Ptomli의 답변 참조).

나머지는 JUnit 테스트 케이스가 독립형 프로그램이 아니라 Java 클래스의 집합이라는 것을 기억해야합니다. maven-surefire-plugin옵션을 설정하는 것은 실행자에게 달려 있습니다 (독립형 JUnit 실행기, IDE가되게하세요 . 즉, 실행자에 관계없이 메모리 설정이 적용되도록 설정하는 “휴대용”방법이 없습니다.

예를 들어 Xmx, 서블릿을 개발할 때 매개 변수를 정의 할 수 없습니다 .이를 정의하는 것은 컨테이너에 달려 있습니다. “이 서블릿은 항상 Xmx=1G.


답변

Maven에서는 surefire 플러그인을 구성 할 수 있습니다.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.9</version>
    <configuration>
        <argLine>-Xmx256M</argLine>
    </configuration>
</plugin>

빌드에 Maven을 사용하는 경우이 구성은 소스 트리에서 수행되고 테스트가 수행 될 때 적용됩니다. Maven Surefire 플러그인 문서를 참조하세요 .


답변

매개 변수를 즉석에서 설정할 수도 있습니다.

mvn test -DargLine="-Dsystem.test.property=test"

참조 http://www.cowtowncoder.com/blog/archives/2010/04/entry_385.html를


답변

이 지원 질문에 따르면
https://intellij-support.jetbrains.com/hc/en-us/community/posts/206165789-JUnit-default-heap-size-overridden-

IntelliJ junit 테스트 실행을위한 -Xmx 인수는 설정된 경우 maven-surefire-plugin에서 제공됩니다.

이 pom.xml 스 니펫

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
                <argLine>-Xmx1024m</argLine>
            </configuration>
        </plugin>

IntelliJ 2016.2.4에서 junit 테스트 실행에 -Xmx1024 인수를 전달하는 것 같습니다.


답변

나는 이러한 설정을 배포하는 간단한 방법이 없다는 다른 사람들의 의견에 동의합니다.

Eclipse의 경우 : 동료에게 다음을 설정하도록 요청하십시오.

  • Windows 기본 설정 / Java / 설치된 JRE :
  • 적절한 JRE / JDK를 선택하십시오 (또는 모두에 대해 수행하십시오).
  • 편집하다
  • 기본 VM 인수 : -Xmx1024m
  • 끝내세요.

그 후 모든 테스트가 실행 -Xmx1024m되지만 불행히도 모든 Eclipse 설치에서 설정했습니다. 이 설정을 포함하는 사용자 정의 Eclipse 패키지를 만들어 동료에게 제공 할 수 있습니다.

다음 작업 프로세스도 도움이 될 수 있습니다. IDE가 테스트를 실행할 수없는 경우 개발자는 Maven이이 테스트를 실행할 수 있는지 확인해야합니다.

  • Maven 이 실행할 수 있다면 일반적으로 실패의 원인은 개발자의 IDE 설정입니다. 개발자는 이러한 설정을 확인해야합니다.
  • Maven도 테스트를 실행할 수없는 경우 개발자는 실패의 원인이 IDE가 아니라는 것을 알고 있으므로 IDE를 사용하여 테스트를 디버깅 할 수 있습니다.

답변

systemPropertyVariables를 사용할 수 있습니다 (java.protocol.handler.pkgs는 JVM 인수 이름입니다).

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.12.4</version>
    <configuration>
        <systemPropertyVariables>
            <java.protocol.handler.pkgs>com.zunix.base</java.protocol.handler.pkgs>
            <log4j.configuration>log4j-core.properties</log4j.configuration>
        </systemPropertyVariables>
    </configuration>
</plugin>

http://maven.apache.org/surefire/maven-surefire-plugin/examples/system-properties.html


답변

java.library.path JVM 매개 변수로 제한된 Eclipse 특정 대안을 사용하면 다른 응답에서 제안한대로 전체 jdk가 아닌 특정 소스 폴더에 대해 설정할 수 있습니다.

  1. 시작할 프로그램이있는 소스 폴더를 선택합니다 (일반적으로 source / test / java).
  2. 해당 폴더의 속성 페이지를 열려면 alt Enter를 입력하십시오.
  3. 왼쪽 패널에서 네이티브 선택
  4. 기본 경로를 편집하십시오. 경로는 작업 공간에 대해 절대적이거나 상대적 일 수 있으며, 두 번째 경로는 더 탄력적 인 변경입니다.

maven argline 태그가 systemProperties 1보다 선호되어야하는 이유에 대한 세부 사항에 관심이있는 사람들은 다음을보십시오.

Maven 테스트 (lwjgl)에서 네이티브 JNI 파일 선택