Gradle 및 -D를 통해 내 테스트에 시스템 속성을 제공하는 방법
시스템 속성을 읽는 Java 프로그램이 있습니다.
System.getProperty("cassandra.ip");
시작하는 Gradle 빌드 파일이 있습니다.
gradle test -Pcassandra.ip=192.168.33.13
또는
gradle test -Dcassandra.ip=192.168.33.13
그러나 System.getProperty 는 항상 null을 반환 합니다.
내가 찾은 유일한 방법은 내 Gradle 빌드 파일에
test {
systemProperty "cassandra.ip", "192.168.33.13"
}
-D를 통해 어떻게합니까
-P 플래그는 gradle 속성 용이고 -D 플래그는 JVM 속성 용입니다. 테스트가 새 JVM에서 분기 될 수 있기 때문에 gradle에 전달 된 -D 인수는 테스트로 전파되지 않습니다. 이는 사용자가보고있는 동작 인 것처럼 들립니다.
test
했던 것처럼 블록 에서 systemProperty를 사용할 수 있지만 -P와 함께 전달하여 들어오는 gradle 속성을 기반으로 할 수 있습니다.
test {
systemProperty "cassandra.ip", project.getProperty("cassandra.ip")
}
또는 -D를 통해 전달하는 경우
test {
systemProperty "cassandra.ip", System.getProperty("cassandra.ip")
}
gradle 스크립트의 명령 줄에 주어진 모든 속성을 다시 나열하고 싶지 않다는 점을 제외 하고는이 문제가 많이 발생했습니다. 따라서 모든 시스템 속성을 테스트에 보냅니다.
task integrationTest(type: Test) {
useTestNG()
options {
systemProperties(System.getProperties())
}
}
내가 전달하는 데 필요한 경우 한 여러 테스트 JVM하지만에 시스템 속성을 모든 (관련이없는 사람에 통과하고 싶지 않았다)를. 위의 답변을 바탕으로 subMap
필요한 항목을 필터링하는 데 사용하면 다음과 같은 효과가 있습니다.
task integrationTest(type: Test) {
// ... Do stuff here ...
systemProperties System.getProperties().subMap(['PROP1', 'PROP2'])
}
이 예에서는 gradle의 JVM에 존재하는 경우 에만 PROP1
및 PROP2
전달됩니다.
다음은 수많은 프로젝트 속성을 시스템 속성으로 테스트 JVM에 전달하는 변형입니다. 유연성을 높이기 위해 시스템 속성보다 프로젝트 속성을 선호합니다.
task intTest(type: Test) {
systemProperties project.properties.subMap(["foo", "bar"])
}
명령 줄에서 전달할 수 있습니다.
$ gradle intTest -Pfoo=1 -Pbar=2
그리고 테스트에서 검색 :
String foo = System.getProperty("foo");
그래서 오늘도 그 문제를 우연히 발견했고 저에게 효과가 있었던 것은 다음과 같습니다.
ext.env='prod'
test {
systemProperty 'env', System.properties['env'] ?: "${env}"
println "# test environment: " + systemProperties['env']
...
}
-Penv = dev를 사용하여 테스트 작업을 호출 하고 있으며 인쇄에서 'dev'값을 얻거나 값을 보내지 않으면 'prod'를 얻습니다.
값은 System.getProperty ( "env")를 사용하여 Java 측에서도 액세스 할 수 있습니다 .
My conclusion on the matter is that input value (parameter) is actually stored under System, making it accessible through either System.properties['env'] or System.getProperty("env"), whereas output (system property) is stored in a systemProperties array, making it readable through systemProperties['env'].
참고URL : https://stackoverflow.com/questions/21406265/how-to-give-system-property-to-my-test-via-gradle-and-d
'Programing' 카테고리의 다른 글
-128에서 127 사이의 값을 Integer 클래스 캐싱하는 이유는 무엇입니까? (0) | 2020.10.08 |
---|---|
Reactjs : 예기치 않은 토큰 '<'오류 (0) | 2020.10.08 |
런타임 오류 : nil 맵의 항목에 할당 (0) | 2020.10.08 |
ES2015 (ES6)`class` 구문은 어떤 이점을 제공합니까? (0) | 2020.10.08 |
두 가지 유형으로 변수 선언 : "int char" (0) | 2020.10.08 |