2017-12-08 8 views
0

빌드/디버그 유닛 테스트 또는 다른 종류의 테스트를 수행 할 때 IntelliJ가 자동으로로드해야하는 일부 환경 변수가 build.gradle에 있습니다. 따르면 개별 테스트)를 실행하여gradle에서 Intellij 실행 및 디버그 모드로 환경 변수 및 시스템 변수를 입력하십시오.

예 :

build.gradle

plugins { 
    id 'org.unbroken-dome.test-sets' version '1.4.2' 
} 

apply plugin: 'java' 
apply plugin: 'idea' 

testSets { 
    integrationTest { 
     dirName = 'integration-test' 
    } 
} 

test { 
    environment 'MY_ENV_VAR_1', 'my_env_value_1' 
} 

integrationTest { 
    environment 'MY_ENV_VAR_1', 'my_env_value_1000' 
} 

시험 방법 (모두 t에서 추정 및 통합 테스트 DIRS)

@Test 
public void test() { 
    System.out.println(System.getenv("MY_ENV_VAR_1")); 
} 

실행

  • gradle test 출력합니다 my_env_value_1
  • gradle integrationTest 인쇄 출력 인 IntelliJ에서 my_env_value_1000
  • 가 : 바로 테스트를 클릭하고 실행 -> 인쇄 아무것도. 통합 테스트와 동일합니다.

IntelliJ의 gradle 프로젝트 창에서 "모든 gradle 프로젝트 새로 고침"단추를 클릭했습니다. 변경 없음. 질문은 환경 변수로 범위가 지정되지 않았습니다. IntelliJ의 시스템 속성이나 다른 것들을 gradle에서 실행/디버그 모드로로드하는 기능도 훌륭합니다.

+0

나는 이것을 시도 할 기회가 없었으므로 답변이 아니라 답변을 얻지 못했지만 Gradle 아이디어 플러그인을 통해 Intellij 프로젝트 파일을 생성 해 보았습니까? gradle cleanIdea 아이디어를 실행하고 그것이 생성하는 것을보십시오. 그것이 이론적으로는 작동하지 않는다면 gradle에서 생성하는 프로젝트 파일을 조작 할 수 있습니다.하지만 그렇게하려면 약간의 faff가 될 수 있습니다. –

+0

아이디어 플러그인은 제 gradle 파일이므로 질문에 대한 대답이 '예'라고 가정합니다. – fabien

답변

0

IntelliJ에서는 기본적으로 IntelliJ를 통해 처리하는 대신 IDE 빌드/실행 작업을 Gradle에 위임해야합니다. 이 체크 표시가 없으면 IntelliJ는 알고있는 속성을 사용하여 이러한 변수를 해결하려고 시도합니다. 이는 이 아니며이 될 수 있습니다.

enter image description here

+0

gradle 테스트를 실행하거나 gradle에 위임을 사용하면 몇 가지 다른 문제가 발생합니다. 1) 개별 테스트 메소드를 실행할 수는 없으므로 gradle은 처음 테스트 할 수 없습니다. 2) 테스트를위한 IntelliJ 실행/디버그 창은 테스트 이벤트를 잃어 버리므로 메서드에 대한 통과/실패/충돌 보고서도 손실됩니다. 좋은 트릭이긴하지만, 내가 얻는 것보다 더 많은 것을 잃는 것 같습니다. – fabien

+0

당신은 절대적으로 * Gradle로 개별 테스트 방법을 실행할 수 있습니다. 나는 항상 이것을한다. 귀하의 질문에 좀 더 자세하게 추가하여 귀하가보고있는 것을 보여주십시오. – Makoto

+0

모든 종류의 junit 테스트를 실행할 수 없으므로 해당 기능이 절반으로 손상되었습니다. https://discuss.gradle.org/t/cant-rung-single-test-with-tests-which-uses-runwith-parameterized -class/10438 \ @TestType을 사용하는 테스트도 영향을받을 수 있습니다. 필자는 \ @Test, \ @ Before *, \ @ After * annotations를 사용하는 클래스에 대한 개별 테스트를 실제로 실행할 수 있지만 모든 유스 케이스를 다루지는 못하므로 실용적이지 않습니다. – fabien

0

인 IntelliJ 직접이 기능을 지원하지 않습니다. 가장 좋은 방법은 Idea 플러그인을 사용하여 Intellij 프로젝트 파일을 생성하고 gradle 빌드 파일을 업데이트하여 출력을 조정하는 것입니다.

IntelliJ의 환경 변수는 실행 구성의 일부로 정의 될 수 있으므로 단위 테스트를위한 기본 실행 구성을 업데이트하기 위해 gradle 빌드를 조정할 수 있습니다.

은 프로토 타입으로, 당신의 build.gradle에 다음을 추가 :

idea.workspace.iws.withXml { provider -> 
def runManagerNode = provider.asNode().component.find {[email protected] == 'RunManager'} as Node 
def defaultConfigNode = runManagerNode.configuration.find {[email protected]=='true' && [email protected]=='JUnit'} as Node 

def envsNode = defaultConfigNode.envs[0] as Node 
envsNode.appendNode('env', [name: 'MY_ENV_VAR_1', value: test.environment.MY_ENV_VAR_1]) 
} 

이제 'gradlew cleanIdea 아이디어'를 실행하고 결과 프로젝트를 엽니 다.

실행 -> 구성 -> 기본값 -> junit으로 이동하면 환경 변수의 값이 IntelliJ로 전달되었음을 알 수 있습니다.

이 지금까지 잘 지내 작동하지만 몇 가지 생각/일 필요가 몇 가지 문제가

enter image description here

: 작업 공간 파일이 아래로 삭제되지 않기 때문에

  1. 을, 당신은 있는지 확인해야합니다 그것을 추가하기 전에 이미 존재하는 'env'노드.
  2. 'MY_ENV_VAR_1'이름이 제대로 작동하는지 표시하기 위해 하드 코딩되었습니다.
  3. 값을 변경하는 경우 JUnit의 새로운 기본값을 선택하도록 Idea 프로젝트 파일을 다시 생성하고 JUnit의 기존 실행 구성을 삭제해야합니다.
  4. 테스트 환경 변수와 integrationTest 환경 변수를 구분하는 방법을 생각하지 않았습니다.