1. 개요
게임 개발에서 코드의 품질을 유지하는 것은 매우 중요합니다. Unity3D에서는 Test Runner라는 도구를 제공하여 테스트를 자동화하고, 코드의 안정성을 확인할 수 있습니다. 이 글에서는 Test Runner의 개념, 활용 방법, 예제, 그리고 주의할 점에 대해 다룹니다.
2. 개념 설명
2.1 Test Runner란?
Test Runner는 Unity에서 제공하는 테스트 자동화 도구입니다. 이를 통해 PlayMode와 EditMode에서 테스트를 실행하여 게임 로직과 에디터 스크립트를 검증할 수 있습니다.
2.2 Test Runner의 구성
- EditMode Tests: 에디터 내에서 실행되는 테스트로, 주로 스크립트 로직 검증에 사용됩니다.
- PlayMode Tests: 실제 게임 플레이 환경에서 실행되는 테스트로, 게임 오브젝트의 동작과 상호작용을 검증합니다.
2.3 사용되는 프레임워크
Test Runner는 Unity의 통합 테스트 프레임워크인 NUnit을 기반으로 합니다. 이를 통해 Assert 메서드를 사용하여 조건을 검증할 수 있습니다.
3. Test Runner 패키지 설치
Test Runner를 사용하려면 Unity의 Test Framework 패키지를 설치해야 합니다. 다음은 설치 방법입니다:
- 패키지 매니저 열기:
- Unity 에디터 상단 메뉴에서 Window > Package Manager를 선택합니다.
- Test Framework 검색:
- Package Manager 창의 검색창에 "Test Framework"를 입력합니다.
- 패키지 설치:
- 검색 결과에서 "Test Framework"를 선택하고, 오른쪽 하단의 Install 버튼을 클릭합니다.
- 설치 확인:
- 패키지가 성공적으로 설치되면, 프로젝트에 Test Runner를 사용할 준비가 완료됩니다.
4. 활용 예
4.1 EditMode 테스트 작성
- Test Assembly Folder 생성:
- Assets 폴더에서 Create > Testing > Test Assembly Folder를 선택합니다.
- EditMode 테스트를 작성할 폴더를 생성합니다.
- EditMode 테스트 스크립트 작성: 다음은 간단한 EditMode 테스트의 예제입니다.
- 테스트 실행:
- Unity 메뉴에서 Window > General > Test Runner를 엽니다.
- "EditMode" 탭을 선택하고 테스트를 실행합니다.
using NUnit.Framework;
public class MathTests
{
[Test]
public void AdditionTest()
{
int result = 2 + 3;
Assert.AreEqual(5, result);
}
}
4.2 PlayMode 테스트 작성
- PlayMode 테스트 활성화:
- Assets 폴더에서 Create > Testing > Test Assembly Folder를 선택합니다.
- PlayMode 테스트를 작성할 폴더를 생성합니다.
- PlayMode 테스트 스크립트 작성: 다음은 PlayMode 테스트의 예제입니다.
- 테스트 실행:
- "PlayMode" 탭을 선택하고 테스트를 실행합니다.
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;
using System.Collections;
public class PlayerMovementTests
{
[UnityTest]
public IEnumerator PlayerMovesForward()
{
GameObject player = new GameObject();
player.transform.position = Vector3.zero;
Vector3 targetPosition = new Vector3(0, 0, 5);
player.transform.position = targetPosition;
yield return null;
Assert.AreEqual(targetPosition, player.transform.position);
}
}
4.3 NUnit Attributes 활용
NUnit 테스트 프레임워크에서 제공하는 다양한 속성을 활용하면 테스트를 더욱 효율적으로 작성할 수 있습니다. 아래는 주요 Attribute와 그 용도입니다:
- [TestCase]: 다양한 입력값을 하나의 테스트 메서드에서 테스트할 수 있도록 합니다.
[TestCase(2, 3, 5)]
[TestCase(0, 0, 0)]
public void AdditionTest(int a, int b, int expected)
{
Assert.AreEqual(expected, a + b);
}
- [SetUp]: 각 테스트가 실행되기 전에 공통 초기화 작업을 수행합니다.
[SetUp]
public void Init()
{
// 테스트 준비 작업
}
- [TearDown]: 각 테스트가 실행된 후 정리 작업을 수행합니다.
[TearDown]
public void Cleanup()
{
// 테스트 정리 작업
}
- [UnitySetUp]: UnityTest에서 사용되며, 각 테스트 실행 전 Unity 환경에서 초기화 작업을 수행합니다.
[UnitySetUp]
public IEnumerator InitUnity()
{
yield return null;
}
5. 주의점 혹은 특이점
5.1 테스트 환경 구분
- EditMode와 PlayMode 테스트는 서로 다른 실행 환경에서 작동하므로, 테스트 코드를 작성할 때 올바른 환경을 선택해야 합니다.
5.2 테스트의 성능
- PlayMode 테스트는 실제 게임 환경에서 실행되기 때문에 테스트 실행 속도가 느릴 수 있습니다. 빠른 피드백이 필요한 경우, 가능한 EditMode 테스트로 로직을 검증하세요.
5.3 비동기 코드 테스트
- Unity에서 비동기 메서드를 테스트하려면 UnityTest를 사용하여 IEnumerator를 반환해야 합니다. 그렇지 않으면 테스트가 정상적으로 실행되지 않을 수 있습니다.
5.4 의존성 문제
- 테스트 코드는 특정 게임 오브젝트나 리소스에 의존하지 않도록 작성하는 것이 좋습니다. 이를 위해 목(Mock) 오브젝트나 의존성 주입을 활용할 수 있습니다.
- 테스트가 용이한 서로 의존적이지 않은 코드를 작성하려면 각 용도별로 패키지를 분리하는 것도 하나의 방법입니다.
6. 결론
Unity의 Test Runner는 게임 개발 중 발생할 수 있는 오류를 사전에 방지하고, 코드의 안정성을 유지하는 데 매우 유용한 도구입니다. 이 글에서 다룬 EditMode와 PlayMode 테스트의 개념, 패키지 설치 방법, 다양한 Attribute 활용, 그리고 활용 예제를 바탕으로, 프로젝트에 테스트 자동화를 도입해보세요. 이를 통해 게임의 품질을 한 단계 끌어올릴 수 있을 것입니다.
| 참고
Unity 테스트 러너에서 테스트 작성 및 실행 - Unity 매뉴얼
Unity 테스트 러너(Test Runner)는 Edit 모드와 Play 모드에서 코드를 테스트하며 스탠드얼론, Android, iOS와 같은 타겟 플랫폼에서도 사용 가능합니다.
docs.unity3d.com
About Unity Test Framework | Test Framework | 1.1.33
About Unity Test Framework The Unity Test Framework (UTF) enables Unity users to test their code in both Edit Mode and Play Mode, and also on target platforms such as Standalone, Android, iOS, etc. This package provides a standard test framework for users
docs.unity3d.com
패키지 레이아웃 - Unity 매뉴얼
다음은 커스텀 패키지에 대한 권장 패키지 레이아웃입니다.
docs.unity3d.com
'Workspace > Unity3d' 카테고리의 다른 글
[기초] Unity3D에서 Physics.Raycast 활용하기 (0) | 2025.01.21 |
---|---|
[기초] Unity3D에서 LRU Cache 구현 및 활용하기 (0) | 2025.01.21 |
[기초] Unity3D에서 코루틴(Coroutine) 완벽 가이드 (0) | 2025.01.21 |
Unity Search 사용 방법 (0) | 2024.08.19 |
[Unity3d][Editor][UIToolkit] Flexible한 3개의 Pane 구성하기 (1) | 2023.10.24 |