로그 확인 테스트
worldCreateSaveTest는 게임 테스트 서버에서 모드를 로드해 월드를 만들고 저장한 뒤, build.gradle.kts에 적은 로그 줄이 모두 나왔는지 확인합니다. 창은 뜨지 않습니다.
build.gradle.kts
tasks.named<dev.polymodloader.devtools.gradle.minecraft.VerifiedGameRunTask>("worldCreateSaveTest") {
expectedOutput.add("[ruby_mod] Hello from ruby_mod 0.1.0")
}
- Windows (PowerShell)
- macOS · Linux (bash)
.\gradlew.bat worldCreateSaveTest
./gradlew worldCreateSaveTest
- 엔트리포인트가 실행됐는지, 서버가 시작됐는지처럼 "실행 경로"를 확인할 때 씁니다.
- 로그 줄은 모드 코드에서 SLF4J로 남깁니다.
static final Logger LOGGER = LoggerFactory.getLogger("ruby_mod");
LOGGER.info("[ruby_mod] Hello from {} {}", mod.modId(), mod.modVersion());
확인할 로그 줄과 파일
worldCreateSaveTest, gameTests, serverBootSmokeTest는 같은 작업 타입(VerifiedGameRunTask)입니다. 확인할 내용을 두 속성으로 지정합니다.
| 속성 | 뜻 |
|---|---|
expectedOutput | 게임 출력에 나와야 하는 문자열. 줄 전체가 아니라 일부만 맞아도 됩니다 |
expectedFiles | 게임이 끝난 뒤 있어야 하는 파일·폴더. 실행 디렉터리 기준 경로 |
build.gradle.kts
tasks.named<dev.polymodloader.devtools.gradle.minecraft.VerifiedGameRunTask>("worldCreateSaveTest") {
expectedOutput.add("[ruby_mod] Hello from ruby_mod 0.1.0")
expectedFiles.add(".poly/startup-report.json")
}
add는 작업이 원래 확인하는 항목에 항목을 더하고,set은 원래 항목을 통째로 바꿉니다.worldCreateSaveTest의 월드는 실행 디렉터리의universe/gametestworld/에 저장됩니다.- Poly 모드 로더 보고서는 실행 디렉터리의
.poly/에 생깁니다(문제 해결).
작업이 기본으로 확인하는 것
모드 플러그인이 작업을 만들 때 넣어 두는 항목입니다. 직접 적은 항목은 여기에 더해집니다.
| 작업 | 기본 로그 줄 | 기본 파일 |
|---|---|---|
worldCreateSaveTest | All 1 required tests passed | universe/gametestworld/level.dat |
gameTests | required tests passed | 없음 |
serverBootSmokeTest | 없음 | 없음 |
clientWorldReloadTest | joined the game | — |
확인 작업은 이렇게 동작합니다.
- 실행 디렉터리(
build/poly/…)를 지우고 빈 디렉터리에서 시작합니다. - 게임 출력을 콘솔에 보여 주면서 모아 둡니다.
- 게임이 끝나면 출력 전체를 실행 디렉터리의
verified-run-output.log에 씁니다. - 빠진 로그 줄(
missing log line: …)이나 파일(missing file: …)이 하나라도 있으면 작업이 실패합니다. 오류 메시지에 출력 로그의 경로가 나옵니다. - 모두 있으면
… passed (N log lines, M files verified)를 남깁니다.
클라이언트 확인
clientWorldReloadTest는 다른 작업 타입(ClientWorldReloadTask)입니다. worldCreateSaveTest가 저장한 월드를 클라이언트의 saves/에 복사해 바로 엽니다. 클라이언트는 창 없이 실행할 수 없어 창이 잠깐 뜹니다.
build.gradle.kts
tasks.named<dev.polymodloader.devtools.gradle.minecraft.ClientWorldReloadTask>("clientWorldReloadTest") {
// common 엔트리포인트는 클라이언트에서도 실행됩니다.
expectedOutput.add("[ruby_mod] Hello from ruby_mod 0.1.0")
}
| 속성 | 뜻 |
|---|---|
expectedOutput | 클라이언트 출력에 나와야 하는 문자열 |
timeoutSeconds | 기다리는 최대 시간(기본 180초) |
systemProperties | 클라이언트에 줄 Java 시스템 속성(key=value) |
- 기대한 줄이 모두 나오면 클라이언트를 끄고 통과합니다.
- 시간 안에 다 나오지 않거나 클라이언트가 먼저 끝나면 빠진 줄을 알리고 실패합니다.
- 출력 전체는 실행 디렉터리의
client-world-reload-output.log에 있습니다.
게임 내 테스트와 함께
게임 동작은 게임 내 테스트로, 로드·시작·저장 같은 흐름은 로그 확인 테스트로 확인하면 좋습니다.