Debug & Exception

프로그래밍에서 Debug는 코드에 있는 오류를 찾아내고 수정하는 과정을 말합니다. 이 과정을 통해 프로그래머는 코드 실행 중에 발생하는 문제를 해결하고, 코드의 정확성과 안정성을 높일 수 있습니다.

Debug를 수행하는 방법은 여러 가지가 있습니다. 일반적으로 프로그래밍 언어에서 제공하는 디버깅 도구를 사용하거나, 로깅(logging)이나 디버깅 메시지(debugging message)를 출력하여 코드 실행 중에 변수 값 등을 확인할 수 있습니다. 또한 코드를 작은 부분으로 나누어 하나씩 실행해 보거나, 테스트 케이스를 작성하여 코드를 실행해 보는 것도 유용합니다.

Debug는 프로그래머가 자신이 작성한 코드를 이해하고, 오류를 찾아 수정하는 능력을 키우는 데 도움이 됩니다. 따라서 Debug 과정은 프로그래밍의 필수적인 부분 중 하나입니다.

일반적으로 레퍼런스가 깨져있는지 검사하고 로그를 찍는 것은 실제로 함수가 호출될 때 사용됩니다.

  • Component가 시작할 때 레퍼런스를 검사하면, 오류가 많이 떠 알아보기 힘들 수 있습니다.
  • 시작할 때, 컴포넌트가 없고 이후에 생성되서 추가되는 경우가 있습니다.

throw exception 하고, 메시지를 넣으면 Unity에서 오류 메시지가 뜹니다. 반드시 지켜야 되는 수준일 경우 예외 처리를 하도록 합니다.

Debug and Assert

유니티(Unity) Debug 클래스는 게임 또는 애플리케이션 개발 중에 발생하는 문제를 찾고 해결하기 위한 디버깅 기능을 제공하는 클래스입니다. Debug 클래스는 다양한 방법으로 사용될 수 있습니다. 가장 기본적인 방법은 Debug.Log() 함수를 사용하여 콘솔에 출력하는 것입니다. 이 함수는 실행 중인 코드의 특정 부분에서 변수 값을 확인하거나, 코드 실행 흐름을 파악하기 위한 디버깅 메시지를 출력하는 데 사용됩니다.

Assert 클래스는 프로그램의 실행 도중에 특정 조건이 참인지 검사하는 기능을 제공하는 클래스입니다. 이를 통해 개발자는 프로그램이 예상대로 동작하는지 확인할 수 있습니다.

Assert 클래스의 어설션 메서드를 사용하면, 프로그램이 실행되는 동안 특정 조건이 항상 참인지를 검사할 수 있습니다. 만약 조건이 참이 아니라면, 어설션 메서드는 예외를 발생시켜 프로그램을 중단시킵니다.

Automation Test

AutomationTest

유니티(Unity) Test Framework는 유니티에서 게임 및 애플리케이션을 테스트하기 위한 공식 프레임워크입니다. 이 프레임워크는 유니티 에디터에서 동작하며, 테스트 케이스를 작성하고 실행하는 데 사용됩니다.

유니티 Test Framework는 유니티의 기능 중 하나로, 테스트를 자동화하여 개발자가 테스트를 빠르고 효율적으로 수행할 수 있도록 도와줍니다. 이를 통해 개발자는 프로그램의 정확성과 안정성을 보장하고, 문제가 발생하는 부분을 빠르게 찾아내고 해결할 수 있습니다.

Test Example

public class FieldTest
{
    // 테스트는 일반 메서드처럼 동작합니다.
    [Test]
    public void FirstTestSimplePasses()
    {
        // Assert클래스를 사용하여 조건 테스트
				...
    }
}
public class FieldTest
{
    // UnityTest는 플레이모드에서 코루틴처럼 작동합니다.
    // 편집 모드에서 'yield return null;'을 사용하여 프레임을 건너뛸 수 있습니다.
    [UnityTest]
    public IEnumerator FirstTestWithEnumeratorPasses()
    {
        // Assert 클래스를 사용하여 조건을 테스트합니다.
        // yield를 사용하여 프레임을 건너뜁니다.
        yield return null;
    }
}
  • Editor 폴더를 만들어 테스트를 추가하여 전체 프로젝트의 코드를 테스트할 수 있습니다.

AutomationTest

Get Serialized Object

[SerializeField] private ...로 캡슐화된 컴포넌트를 테스트 해야 하지만, 값을 다시 설정하는 메서드를 추가하면 안되는 경우가 있습니다. 이러한 경우 Serialize된 컴포넌트를 테스트하기 위한 방법입니다.

에디터에서 ScriptableObject의 기본값을 설정합니다. 여기서는 테스트용 prefab로 초기화합니다.

  • Monobehaviour가 Editor폴더 안에 있는 경우 AddComponent를 사용할 수 없습니다.
public class TestPrefabScriptableObject : ScriptableObject
{
    public GameObject Prefab;
}

다음 테스트 코드에서 해당 프리팹을 간단히 가져올 수 있습니다.

public class TestPrefab
{
    [Test]
    public void TestPrefabSimplePasses()
    {
        var instance = ScriptableObject.CreateInstance<TestPrefabScriptableObject>();
        Debug.Log($"prefab naem : {instance.Prefab.name}");
        Assert.IsNotNull(instance.Prefab);
    }
}

다음은 테스트의 결과입니다.

 TestPrefabSimplePasses (0.019s)
---
prefab naem : TestPrefabGameObject