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


95

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

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

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

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

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


나는 그것이 실현 가능한지 의심 스럽다. 여러 시스템에서 주어진 IDE에 대해 실행 가능해야합니다. 그러나 IDE 간에는 방법을 알 수 없습니다.
JB Nizet 2011 년

@JBNizet-주어진 IDE (Intellij IDEA 제공)를 위해 여러 컴퓨터를 사용하게되어 기쁩니다.
수정안

답변:


48

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

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

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

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

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


실행 / 디버그 구성은 어디에 있습니까? 테스트를 실행할 때 환경 설정 또는 컨텍스트 메뉴에 표시되지 않습니까?
Dean Hiller 2014

2
이것은 기존 JUnit 실행 구성을 변경하지 않으며 기본값을 변경 한 후에 생성 된 구성 만 변경합니다. 기존 항목을 수동으로 변경해야합니다.
MikeFHay 2016 년

78

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 플러그인 문서를 참조하세요 .


1
@ptomli-저는 항상 "물론 ..."으로 시작하는 댓글을 신뢰하지 않습니다. Intellij Maven 통합은 Maven 빌드주기에서 작업을 실행할 때 pom 플러그인 구성을 사용합니다. IDE에서 단위 테스트를 실행하는 것은 별도의 프로세스이며 기본적으로 빌드 프로세스에 대한 지식이 없습니다. 내가 아는 한, 이들을 연결하는 방법은 없습니다. 이것은 당신이 알고 있거나 해본 일입니까? 어떤 경우에 어떻게하는지 공유 할 수 있습니까?
11

1
Intellij에서 이것이 가능할지 모르겠습니다. TBH라고하더라도 그 접근 방식을 사용하고 싶지 않습니다. IDE에서 단위 테스트를 실행하고 있다면 할 수 없었던 IDE 디버거를 활용하고 싶기 때문입니다. mvn 테스트를 실행하여.
수정안

5
실제로 IntelliJ의 Maven 통합 개별 단위 테스트를 실행할 때 Maven Surefire 구성을 사용합니다. 위의 Maven 구성을 사용하면 -Xmx256MIntelliJ에서 직접 단위 테스트를 실행할 때 Java 명령 줄로 전달됩니다. 이것은 단지 :-( 나를 지옥을 혼동하고있다
Kkkev

1
참고 : 넷빈즈는 또한 테스트를 실행하기 위해 메이븐 Suefire를 사용
Ferrybig

1
@Kkkev IntelliJ의 Maven 통합은 IntelliJ에서 개별 테스트를 실행하는 것과 다릅니다. 첫 번째는 Maven 실행 구성 (따라서 인수를 읽음)을 사용하고 두 번째는 JUnit, TestNG ... 구성을 사용합니다.
andresp


14

이 지원 질문에 따르면 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 인수를 전달하는 것 같습니다.


13

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

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

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

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

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

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

프로젝트를 maven으로 빌드해야한다고 말하는 것은별로 도움이되지 않습니다. (우리는 maven으로 만 빌드하고 있습니다.) 그러나 귀하의 제안에는 Maven 빌드주기의 일부로 만 테스트를 실행해야한다는 것이 암시되어 있습니다. 종종 IDE에서 디버깅을 위해 동일한 테스트를 사용합니다. (일단 디버깅이 완료되면 빌드주기에서 이러한 테스트를 쉽게 유지할 수 있다는 이점이 있습니다.)
amaidment

좋아-하지만 이제는 Tomasz의 대답을 반복하고 있지만 Eclipse 사양으로 ...
amaidment

2

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


1

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

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

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

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


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