게임 테스트
게임 테스트는 게임 속에서 단위 테스트를 수행할 수 있도록 해줍니다. 이 시스템은 확장하기 쉽고 한 번에 여러 테스트를 효율적으로 수행할 수 있습니다. 이 프레임워크는 여러 게임 속 객체의 상호 작용을 테스트할 때 유용합니다.
게임 테스트 작성하기
게임 테스트는 일반적으로 다음 세 단계로 이루어지는데:
- 게임 테스트를 수행할 장소를 불러옴. 이때 구조물 블록으로 생성한
.nbt
파일 등을 사용함. - 해당 장소에서 테스트 로직 수행.
- 테스트 결과 확인. 만약 테스트에 실패했다면 해당 장소에 인접한 독서대에 결과를 기록함.
다시 말해서, 게임 테스트를 작성하기 위해선 테스트를 수행할 환경이 조성되어 있는 장소가 필요합니다. 구조물 블록을 활용하면 .nbt
파일을 생성하실 수 있습니다.
테스트 로직 작성하기
각 테스트 로직은 아래와 같이 Consumer<GameTestHelper>
로 표현될 수 있는 메서드 입니다. 메서드를 게임 테스트 로직으로 사용하시려면 무조건 GameTest
어노테이션이 있어야 합니다:
public class ExampleGameTests {
@GameTest
public static void exampleTest(GameTestHelper helper) {
// 테스트 수행
}
}
@GameTest
어노테이션은 테스트 수행 방식을 설정할 수도 있습니다.
// In some class
@GameTest(
setupTicks = 20L, // 테스트를 준비하는 동안 20틱이 걸림
required = false // 테스트 실패 시 기록은 하나 전체 테스트 결과에 영향을 끼치지 않음
)
public static void exampleConfiguredTest(GameTestHelper helper) {
// 테스트 수행
}
상대 좌표
GameTestHelper
는 주어진 상대 좌표를 구조체 블록의 위치를 활용해서 절대 좌표로 이동시키는 메서드 GameTestHelper#absolutePos
와 GameTestHelper#relativePos
를 제공합니다.
상대 좌표는 /test 명령어를 활용해 확인하실 수 있습니다, 먼저 상대 좌표를 확인하고 싶은 곳으로 이동한 다음 /test pos
를 사용하시면 됩니다. 200블록 이내의 가장 가까운 구조체 블록을 기준 삼아 현재 플레이어의 상대 좌표를 찾아 Java 코드 형태로 출력해 줍니다.
팁
만약 출력되는 Java 코드의 변수 이름까지 지정하고 싶으시다면 아래와 같이 변수 이름까지 적으시면 됩니다:
/test pos <var> # 출력: 'final BlockPos <var> = new BlockPos(...);'