# 패키지에 테스트 추가

> Verify behavior with tests during development.

모든 개발과 마찬가지로 패키지에 테스트를 추가하는 것이 좋습니다. 패키지에 대한 테스트를 설정하려면 세 가지를 수행해야 합니다.

1. C# 테스트 파일을 만든 후 [Tests 폴더에 넣습니다](#location).
2. [테스트를 위해 asmdef 파일](#files)을 만듭니다.
3. 패키지에 대해 [테스트를 활성화](#tests)합니다.

## 테스트 파일의 위치

`Editor` 및 `Runtime` 하위 폴더에 있는 패키지의 Tests 폴더에 테스트 파일을 추가할 수 있습니다. 예를 들어 테스트가 포함된 간단한 패키지는 다음과 같을 수 있습니다.

```
<package-root>
  ├── package.json
  ├── Editor
  │     ├── <company-name>.<package-name>.Editor.asmdef
  │     └── EditorExample.cs
  ├── Runtime
  │     ├── <company-name>.<package-name>.asmdef
  │     └── RuntimeExample.cs
  └── Tests
        ├── Editor
        │    ├── <company-name>.<package-name>.Editor.Tests.asmdef
        │    └── EditorExampleTest.cs
        └── Runtime
             ├── <company-name>.<package-name>.Tests.asmdef
             └── RuntimeExampleTest.cs
```

각 하위 폴더에는 Editor 및 Runtime 어셈블리에 대한 레퍼런스를 제공하는 `.asmdef` 파일이 포함되어야 합니다. 어셈블리 정의 파일은 테스트 어셈블리 파일에 대한 레퍼런스도 제공합니다. 자세한 내용은 [테스트를 위한 어셈블리 정의 파일](#files)을 참조하십시오.

## 테스트용 어셈블리 정의 파일

[Test Framework](https://docs.unity3d.com/Packages/com.unity.test-framework@latest/) 패키지를 사용하여 어셈블리 정의 파일을 만들거나 편집합니다. 자세한 내용은 [테스트 어셈블리 생성](https://docs.unity3d.com/Packages/com.unity.test-framework@latest/index.html?subfolder=/manual/workflow-create-test-assembly.html)을 참조하십시오.

어셈블리 정의 파일을 직접 편집할 수 있더라도 다음의 레퍼런스를 추가해야 합니다.

| **속성**                      | **Type** | **설명**                                                                                                                                                                                  |
| --------------------------- | -------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **name**                    | 문자열      | 파일 확장자가 없는 어셈블리 이름입니다.                                                                                                                                                                  |
| **references**              | 문자열 배열   | Editor 및 Runtime 어셈블리에 대한 레퍼런스입니다. 어셈블리 정의 파일에는 테스트 유형에 따라 다른 레퍼런스가 필요합니다.- Editor 테스트의 경우 패키지의 Editor 및 Runtime 어셈블리에 레퍼런스를 추가합니다.- Runtime 테스트의 경우 패키지의 Runtime 어셈블리에 대한 레퍼런스만 추가합니다. |
| **optionalUnityReferences** | 문자열 배열   | 이 Unity 레퍼런스 목록에는 어셈블리를 테스트 어셈블리로 표시하는 `"TestAssemblies"`가 포함되어야 합니다. 그러면 어셈블리 정의에 `nunit.framework.dll` 및 `UnityEngine.TestRunner.dll` 라이브러리에 대한 레퍼런스가 추가됩니다.                          |
| **includePlatforms**        | 문자열 배열   | Editor 테스트의 경우 이 플랫폼 목록은 `"Editor"` 플랫폼을 포함해야 합니다.                                                                                                                                      |

**팁**: 인스펙터에서 어셈블리 정의 파일도 편집할 수 있습니다. 자세한 내용은 [어셈블리 정의](/engine/6000.0/manual/scripting/compilation-and-code-reload/script-compilation/assembly-definition-files.md)를 참조하십시오.

### 에디터 파일 예시

에디터 테스트 `.asmdef` 파일은 다음과 같습니다.

```lang-json
{
  "name": "MyCompany.MyPackage.Editor.Tests",
  "references": [
    "MyPackage.Editor",
    "MyPackage"
  ],
  "optionalUnityReferences": [
    "TestAssemblies"
  ],
  "includePlatforms": [
    "Editor"
  ],
  "excludePlatforms": []
}
```

### 런타임 파일 예시

런타임 테스트 `.asmdef` 파일은 다음과 같습니다.

```lang-json
{
  "name": "MyCompany.MyPackage.Tests",
  "references": [
    "MyPackage"
  ],
  "optionalUnityReferences": [
    "TestAssemblies"
  ],
  "includePlatforms": [],
  "excludePlatforms": []
}
```

## 패키지용 테스트 활성화

내장된 패키지의 경우에는 내장된 패키지가 개발 중이므로 테스트를 명시적으로 활성화할 필요가 없습니다.

하지만 다른 종속성 타입의 경우에는 [testables](/engine/6000.0/manual/packages-list/packages/upm-manifest-prj.md#testables) 속성을 프로젝트 매니페스트에 추가하고 실행할 테스트가 있는 패키지의 이름을 추가해야 합니다. 여기에는 프로젝트의 직접 및 간접 종속성이 포함됩니다. 예시:

```lang-json
{
  "dependencies": {
    "com.unity.some-package": "1.0.0",
    "com.unity.other-package": "2.0.0",
    "com.unity.yet-another-package": "3.0.0",
  },
  "testables": ["com.unity.some-package", "com.unity.other-package"]
}
```

이 예시에서는 Unity [Test Framework](https://docs.unity3d.com/Packages/com.unity.test-framework@latest) 패키지에 **com.unity.*some-package*** 및 **com.unity.*other-package*** 패키지에 대한 테스트를 추가합니다.

**참고**: 테스트 프레임워크가 `testables` 속성에 대한 변경 사항을 즉시 식별하지 못할 때도 있기 때문에 패키지를 다시 임포트해야 할 수 있습니다.
