次の構造を作成しました。
├── Assets
├── Scenes
├── Scripts
│ └── MyExample.cs
├── Tests
│ ├── MyExampleTest.cs
│ └── Tests.asmdef
ここで、Unityの[テストランナー]ウィンドウで[すべて実行]をクリックすると、次のエラーが発生します。
The type or namespace name `MyExample' could not be found. Are you missing an Assembly reference?
Visual Studioには、2つのプロジェクトがあります。
Assembly-CSharp(srcを含む)
テスト(テストを含む)
2番目のプロジェクトの参照としてAssembly-CSharpを追加しました。 Visual Studioは、エラーなしでソリューションを構築できます。
UnityプロジェクトのUnitTest回帰を適切に設定する方法を知っている人はいますか?
これはTests.asmdefです
{
"name": "Tests",
"optionalUnityReferences": [
"TestAssemblies"
]
}
MyExampleTest.cs
using UnityEngine;
using UnityEngine.TestTools;
using NUnit.Framework;
using System.Collections;
using abc;
public class MyExampleTest{
[Test]
public void NewTestScriptSimplePasses() {
// Use the Assert class to test conditions.
}
[UnityTest]
public IEnumerator NewTestScriptWithEnumeratorPasses() {
abc.Example m;
Assert.That(false);
yield return null;
}
}
MyExample.cs
namespace abc
{
public class Example
{
}
}
組み込みのテストランナーUIを使用して、テストアセンブリフォルダーと最初のテストスクリプトをセットアップしてみてください。
Window -> Test Runner -> EditMode -> "Create Test Assembly Folder"
を使用し、新しいテストアセンブリフォルダーに移動したら、Create Test Script in current folder
ボタンを使用します。
特に、Tests.asmdef
には、デフォルトのセットアップ(Unity 2018.1)と比較して「エディター」インクルードがありません。
{
"name": "Tests",
"optionalUnityReferences": [
"TestAssemblies"
],
"includePlatforms": [
"Editor"
]
}
テストをセットアップするために、Visual Studioプロジェクトで手動で何もする必要はありません。
アセンブリファイルが次のように「Any Platform」に設定されている場合(質問のように):
{
"name": "Tests",
"optionalUnityReferences": [
"TestAssemblies"
]
}
テストがテストランナーウィンドウに表示されません。
(前の例のように)「エディター」プラットフォームのみを含めるようにアセンブリファイルを明示的に設定すると、テストランナーウィンドウにテストが正しく表示されます。
(この動作は、私には少し直感に反するようです。)
また、スクリプトのアセンブリ定義を設定する必要があります。 Scripts
フォルダーの下に、アセンブリ定義ファイルMyScriptAssembly.asmdef
を作成します(UnityメニューAssets -> Create -> Assembly Definition
を使用するか、手動で):
{
"name": "MyScriptAssembly"
}
次に、Tests.asmdef
がスクリプトアセンブリを参照していることを確認します。
{
"name": "Tests",
"references": [
"MyScriptAssembly"
],
"optionalUnityReferences": [
"TestAssemblies"
],
"includePlatforms": [
"Editor"
],
"excludePlatforms": [],
"allowUnsafeCode": false
}
Unity Editorインスペクターウィンドウでこれを設定することもできます。 .asmdefファイルを選択する場合は、インスペクターの「参照」を参照してください。
(詳細については、 アセンブリ定義ファイルに関するUnityのドキュメント を参照してください)
最終的に、これに適した適切なソリューションが見つかりました。そしてすべてがエディターを介して行われます。
したがって、テストアセンブリに実際のコードアセンブリを参照させることが目標です。そのためには、両方のアセンブリをdefineしてから、参照を1つに設定する必要があります。
設定しました。テストはUnityで表示および実行できる必要があり、他のスクリプトを参照できます。
ルートフォルダー内のすべての.csprojおよび.slnファイルを削除しても安全であり、Unityはそれらを再作成することに注意してください(ソース管理上にあるべきではありません)。
そのため、そのような変更を行うためのテストは常に
ボーナス:Assets/DebugScenes/DebugScriptsにあるいくつかのデバッグプロジェクトもプロジェクトにあります。それらのために個別のアセンブリを作成し、実際のスクリプトアセンブリ(必要な場合)を参照させ、Editorプラットフォームとしてマークすることにより、これらのスクリプトがビルドなしでビルドに含まれないようにしますビルド中の追加手順。
余分な読書。一部のスクリプトのみをテストするため、すべてのスクリプトのアセンブリを作成したくないと考えるかもしれません。また、サブフォルダーのアセンブリを作成できるのは事実ですが、実際のスクリプトアセンブリから別のスクリプトへの参照を作成する必要があるため、これは問題を引き起こします。だから、すべてがきちんと整頓されており、理にかなっていることを確認してください...