상황의 변화를 위해 약간의 개발 일지를 작성하고 싶습니다. 얼마 전 저는 게임 잼에 참여하여 미로 주변에 치즈를 놓아 쥐를 유인하는 짧은 퍼즐 게임인 Of Mice and Bad Choices 게임을 만들었습니다. 재미있긴 했지만 분명 부족한 부분도 있었습니다.
주요한 것 중 하나는 쥐의 행동이 직관적이지 않다는 것입니다. 플레이어들은 생쥐가 단지 얼어붙는 것이 아니라 싫어하는 치즈를 먹으면 쫓겨날 것으로 예상한다고 언급했습니다. 게다가 이 메커니즘을 구현하면 훨씬 더 풍부한 퍼즐 디자인이 가능해집니다.
그래서 저는 이것이 Godot에서 자동화된 테스트를 수행할 수 있는 좋은 기회라고 생각합니다.
Godot 4에 사용할 수 있는 몇 가지 테스트 프레임워크가 있지만 제 마음에 쏙 드는 프레임워크는 GUT(Godot Unit Test) 입니다. GUT는 매우 간단합니다.
test_
로 시작하는 함수를 추가하고 몇 가지 주장(일반적인 단위 테스트 구조)을 작성하기만 하면 됩니다.
이 특별한 경우에는 코드가 아닌 엔진 편집기에서 게임 레벨을 정의하는 것과 같은 방식으로 복잡한 시나리오를 정의하는 방법을 원했습니다(이렇게 하면 테스트가 현실에 더 가까워질 것입니다). 따라서 나는 다음과 같은 작업을 수행하고 싶습니다.
그럼 이것을 풀어보겠습니다.
새 클래스 `MouseTestCase`를 정의해 보겠습니다. 우리는 Node2D
상속하기를 원합니다(장면에 배치하고 싶기 때문에). 그리고 우리가 직접 장면에 배치할 자식 중에서 마우스와 마우스를 찾기를 원합니다. 예상되는 최종 위치(마커로서)
extends Node2D class_name MouseTestCase @export var steps_left = 0 # How many steps to simulate @export var done = false @onready var mouse: Mouse = $Mouse @onready var expected_position = SnapUtils.get_tile_map_position($TestMarker.position)
이제 우리는 그것을 현장에 적용할 수 있고, 우리는 좋습니다! 우리는 마우스가 어디서 시작하는지, 어디서 끝나야 하는지, 몇 단계를 거쳐야 하는지 알고 있습니다.
이제 그것들을 더 많이 만들어서 우리의 혐오 행동을 테스트하기 위한 지도를 만들어 봅시다.
이 동작은 다소 복잡하므로 약간 다른 여러 사례를 다루려고 합니다.
이 동작을 다루기 위해 12개의 테스트 사례를 정의하는 결과 맵이 위에 나와 있습니다(코드에서 모든 좌표를 하드 코딩하는 것이 얼마나 지루할 수 있는지 상상해 보십시오).
이제 남은 것은 테스트 실행기 기능뿐입니다. 이 기능은 다음을 수행해야 합니다.
코드는 매우 간단합니다.
func run_level_with_mouse_test_cases(map_path: String): var level = load(map_path) map.load_level(level) var cases = MouseTestCase.cast_all_cases(get_tree().get_nodes_in_group(MouseTestCase.MTC_GROUP_NAME)) while (cases.any(func(case): return not case.done)): map.move_mice() for case in cases: if not case.done: case.steps_left -= 1 if case.steps_left == 0: case.done = true assert_eq(case.get_mouse_position(), case.expected_position, case.get_parent().name+"/"+case.name)
나는 이것이 발전할 것이라고 상상하지만, 현재의 구현은 현재로서는 충분합니다. 나는 테스트를 작성하고 메커니즘을 구현했으며 테스트를 통해 실제로 메커니즘이 올바르게 구현되었는지 확인했습니다!
여기서는 게임에서 테스트에 접근하는 한 가지 방법을 보여 드렸습니다. 분명히 여기에는 개선할 사항이 더 많이 있습니다. 따라서 독자들이 코드와 프레임워크를 가져와 자신의 필요에 맞게 조정하도록 권장합니다.
언제나 그렇듯이 코드는 GitHub( https://github.com/d-lowl/of-mice-and-bad-choices )에서 확인할 수 있습니다. 또한 테스트를 소개하는 특정 PR을 살펴볼 수도 있습니다. 보너스 포인트의 경우 누군가가 CI에서 작동하도록 할 수 있다면 정말 좋을 것입니다. 건배.