Unity Test Runner를 사용해서 Unit Test를 해보자

Updated:

시작하면서

​ 테스트는 프로그래머에게 고통이다. 코드를 수정할 때마다 꼭 해야하지만, 이전에 작성한 코드들까지 연계되어 있는 작업일 경우 전부 다 테스트해봐야한다(이 작업을 더욱 꼼꼼하게 해주시는 QA분들 감사합니다). 이 작업에 대한 부담을 덜어주고, 보다 효율적이게 하려면 테스트 자동화(Test Automation)가 필요하다. Unity에서는 Test Runner를 통해 테스트 자동화를 만들 수 있다. 오늘은 이에 대해 알아보자

패키지 다운로드

​ 먼저 패키지 다운로드가 필요하다. Window -> Package Manager -> Test Framework를 Import한다. (나중에 사용할 Code Coverage도 미리 설치해도 좋다)

image-20210929155538330

​ 설치 후에는 Window -> General -> Test Runner로 접근해서 Test Runner를 실행한다.

image-20210929155855923

​ 실행하면 위와 같은 화면이 뜬다. 상단을 보면 PlayModeEditMode가 있다. PlayMode에서는 게임 관련 테스트를 진행하고, EditMode에서는 커스텀 에디터 테스트가 가능하다. 관련 링크

​ 이 글에서는 PlayMode만 설명하겠다. PlayMode를 들어가서 Create PlayMode Test Assembly Folder 버튼을 클릭해준다.

image-20210929161359746

​ 그럼 다음과 같이 Assembly Folder가 자동으로 생성된다. Assembly에 대해 잘 모른다면 해당 링크를 한 번 읽고 오는 것을 추천한다.

image-20210929161618524

image-20210929161754467

​ 위와 같은 파일이 생기는데 지금은 우선 넘어가겠다. (궁금하면 가장 하단에 있는 링크 참조)

image-20210929161843609

​ 다시 Test Runner로 돌아오면 Create Test Script in current folder라는 버튼이 생겨있다. 이 버튼을 클릭하면 스크립트가 하나 생성된다.

image-20210929161922107

​ 해당 스크립트를 열어보면 다음과 같은 코드가 있다.

using System.Collections;
using System.Collections.Generic;
using NUnit.Framework;
using UnityEngine;
using UnityEngine.TestTools;

public class NewTestScript
{
    // A Test behaves as an ordinary method
    [Test]
    public void NewTestScriptSimplePasses()
    {
        // Use the Assert class to test conditions
    }

    // A UnityTest behaves like a coroutine in Play Mode. In Edit Mode you can use
    // `yield return null;` to skip a frame.
    [UnityTest]
    public IEnumerator NewTestScriptWithEnumeratorPasses()
    {
        // Use the Assert class to test conditions.
        // Use yield to skip a frame.
        yield return null;
    }
}

​ 하나씩 살펴보면

  1. [Test] : 단순 기능 테스트를 진행할 수 있다. Assert 클래스를 사용해 조건 비교로 테스트를 진행한다.
  2. [UnityTest] : 여러 테스트를 절차적으로 진행하면서 테스트한다. 유니티 코루틴처럼 동작한다. Assert클래스를 사용해 조건 비교로 테스트를 진행한다.

​ 여기서 다시 Test Runner로 돌아오면 작성된 테스트 함수들이 보인다.

image-20210929162143097

​ 테스트 방법은

  1. 좌측 위의 Run All 버튼을 클릭해서 모든 테스트를 진행할 수 있다.
  2. 각 키워드에 있는 동그라미 버튼을 누르면 트리 구조로 해당 노드를 포함한 하단 테스트들이 모두 진행된다.
  3. 다중 클릭 후 Run Selected를 클릭해서 선택한 테스트들만 진행할 수 있다.
  4. Run All Tests 버튼을 누르면 연결되어있는 기기(혹은 개발 기기 그 자체)에서 빌드 후 테스트를 진행한다.

1~3은 에디터에서 테스트가 진행되고, 4는 빌드 후 해당 플랫폼에서 테스트가 진행된다.

image-20210929162713297

​ 테스트 진행 후에는 별 다른 문제가 없으면 위와 같이 체크 표시가 뜨고, 문제가 있으면 빨갛게 경고 표시가 뜬다.

Assembly 참조

​ NewTestScript에서 작성했던 게임 코드에 접근하려면 접근이 되지 않는다. 그 이유는 어셈블리 참조가 되어있지 않기 때문이다. 어셈블리를 사용해본 사람이라면 참조를 해주면 되고, 처음해본 사람이면 다음을 따라해보자.

(어셈블리의 사용법에 맞는 사용법이 아니라, 단순히 테스트를 가능하게 하는 수준까지만 알려줄 예정이다. 어셈블리를 정확히 사용하려면 글 하단의 링크를 확인하자)

  1. 본인의 게임 코드 폴더에 Assembly Definition을 추가한다. (폴더 내부 및 하위 폴더까지 모두 해당 Assembly로 인식된다.)

image-20211001123731112

  1. 네모 상자 내부의 + 버튼을 눌러서 방금 생성한 Assembly를 참조해준다.

image-20211001124151984

​ 이렇게 하면 코드 참조가 잘 되므로 게임 코드를 테스트하면 된다.

마무리

​ 간단하게 Unity Test Framework 사용법에 대해 정리했다. 각자의 게임에 적합한 테스트를 진행하기 위해서는 여러 방법이 있을 것이다. 이 글은 단지 기초적인 사용법까지만 정리했으니, 더 심오하고 다양한 기능이 필요하면 하단의 Unity DocsManual을 참조하길 추천한다.

[관련 링크]

Unit Testing Docs

Test Framework Manual

Code Sample Docs

Unity Test Runner Docs

Leave a comment