이것은 최근 Gradle의 블로그 게시물 테스트 재실행 중지 주제입니다 . 저자는 사용 예를 보여줍니다 outputs.upToDateWhen { false }그것이 잘못된 이유를 설명 :
이것은 실제로 재실행을 강요하지 않습니다
이 스 니펫의 저자가 말하고 싶었던 것은 "항상 내 테스트를 다시 실행하는 것"입니다. 그것은이 스 니펫이하는 것이 아닙니다. Gradle 이 출력 을 다시 만들 도록 강제로 작업을 오래된 것으로 표시합니다 . 그러나 빌드 캐시가 활성화 된 경우 Gradle은 출력을 다시 만들기 위해 작업을 실행할 필요가 없습니다. 캐시에서 항목을 찾고 결과를 테스트의 출력 디렉토리에 압축 해제합니다.
이 스 니펫도 마찬가지입니다.
test.dependsOn cleanTest
Gradle은 출력이 정리 된 후 빌드 캐시에서 테스트 결과의 압축을 풀므로 아무것도 다시 실행되지 않습니다. 요컨대,이 스 니펫은 비용이 많이 드는 no-op를 생성합니다.
"알겠습니다. 캐시도 비활성화하겠습니다"라고 생각하면 왜 안되는지 알려 드리겠습니다.
그런 다음 저자는 왜 일부 테스트를 다시 실행하는 것이 시간 낭비인지 설명합니다.
대부분의 테스트는 결정 론적이어야합니다. 즉, 동일한 입력이 주어지면 동일한 결과를 가져와야합니다.
코드가 변경되지 않은 테스트를 다시 실행하려는 경우 입력으로 모델링해야합니다. 다음은 블로그 게시물에서 입력을 추가하여 작업을 최신 확인 중에 사용하도록 표시하는 예제입니다.
task randomizedTest(type: Test) {
systemProperty "random.testing.seed", new Random().nextInt()
}
task systemIntegrationTest(type: Test) {
inputs.property "integration.date", LocalDate.now()
}
전체 블로그 게시물을 읽는 것이 좋습니다.