Skip to content

Commit d6145b7

Browse files
committed
Fix APIExample
1 parent edea50d commit d6145b7

13 files changed

+157
-52
lines changed
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
// Copyright (c) 2021-2025 Koji Hasegawa.
2+
// This software is released under the MIT License.
3+
4+
using System.Runtime.CompilerServices;
5+
6+
[assembly: InternalsVisibleTo("APIExample.Editor.Tests")]

Assets/APIExamples/Scripts/Editor/AssemblyInfo.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
// Copyright (c) 2021-2025 Koji Hasegawa.
2+
// This software is released under the MIT License.
3+
4+
using System.Runtime.CompilerServices;
5+
6+
[assembly: InternalsVisibleTo("APIExample.Editor")]
7+
[assembly: InternalsVisibleTo("APIExample.Editor.Tests")]
8+
[assembly: InternalsVisibleTo("APIExample.Tests")]

Assets/APIExamples/Scripts/Runtime/AssemblyInfo.cs.meta

Lines changed: 3 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Assets/APIExamples/Scripts/Runtime/Element.cs

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,8 @@
66
namespace APIExamples
77
{
88
/// <summary>
9-
/// 元素的な属性.
9+
/// 元素的な属性
1010
/// </summary>
11-
/// <remarks>
12-
/// このenumは <c>BasicExample.Entities.Enums.Element</c> とは異なります(仕様を簡略化しました)
13-
/// </remarks>
1411
public enum Element
1512
{
1613
None,
@@ -22,7 +19,7 @@ public enum Element
2219
public static class ElementExtensions
2320
{
2421
/// <summary>
25-
/// 属性名を返す.
22+
/// 属性名を返す
2623
/// </summary>
2724
/// <param name="self"></param>
2825
/// <returns></returns>
@@ -44,7 +41,7 @@ public static string GetName(this Element self)
4441
}
4542

4643
/// <summary>
47-
/// 属性攻撃を受けたときの被ダメージ倍率を返す.
44+
/// 属性攻撃を受けたときの被ダメージ倍率を返す
4845
/// </summary>
4946
/// <param name="self"></param>
5047
/// <param name="attack">攻撃側の属性</param>

Assets/APIExamples/Tests/Editor/APIExamples.Editor.Tests.asmdef

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
"references": [
55
"UnityEngine.TestRunner",
66
"UnityEditor.TestRunner",
7+
"NUnit.Analyzers_Unity",
8+
"APIExamples.Tests",
79
"UniTask"
810
],
911
"includePlatforms": [
Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
// Copyright (c) 2021-2022 Koji Hasegawa.
1+
// Copyright (c) 2021-2025 Koji Hasegawa.
22
// This software is released under the MIT License.
33

4-
using NUnit.Framework;
54

6-
[assembly: Category("APIExamples")]
5+

Assets/APIExamples/Tests/Editor/UnityTestFramework/EditModeTestYieldInstructionExample.cs

Lines changed: 86 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
// Copyright (c) 2021-2022 Koji Hasegawa.
1+
// Copyright (c) 2021-2025 Koji Hasegawa.
22
// This software is released under the MIT License.
33

44
using System;
55
using System.Collections;
6+
using System.Diagnostics.CodeAnalysis;
67
using System.IO;
78
using System.Reflection;
89
using System.Threading.Tasks;
@@ -16,39 +17,59 @@ namespace APIExamples.Editor.UnityTestFramework
1617
/// <summary>
1718
/// <see cref="IEditModeTestYieldInstruction"/>の使用例
1819
/// </summary>
20+
[SuppressMessage("Structure", "NUnit1028:The non-test method is public")]
1921
public class EditModeTestYieldInstructionExample
2022
{
23+
private static bool s_wasInitializeOnEnterPlayModeCalled;
24+
private static bool s_wasRuntimeInitializeOnLoadMethodCalled;
25+
private static bool s_wasOneTimeSetUpCalled;
26+
private static bool s_wasUnitySetUpCalled;
27+
private static bool s_wasSetUpCalled;
28+
private static bool s_wasSetUpAsyncCalled;
29+
2130
private const string CsPath = "Assets/CreateFileExample.cs";
2231
private const string DLLSrcPath = "TestData/NativePluginExample.dll";
2332
private const string DLLDstPath = "Assets/NativePluginExample.dll";
2433

34+
[InitializeOnEnterPlayMode]
35+
public static void InitializeOnEnterPlayMode()
36+
{
37+
s_wasInitializeOnEnterPlayModeCalled = true;
38+
}
39+
40+
[RuntimeInitializeOnLoadMethod]
41+
public static void RuntimeInitializeOnLoadMethod()
42+
{
43+
s_wasRuntimeInitializeOnLoadMethodCalled = true;
44+
}
45+
2546
[OneTimeSetUp]
2647
public void OneTimeSetUp()
2748
{
2849
Assume.That(EditorSettings.enterPlayModeOptionsEnabled, Is.False, "Enter Play Mode Options enabled");
2950
// Note: Edit | Project Settings... | Editor | Enter Play Mode Settings が変更されていないことが前提
3051

31-
Debug.Log("OneTimeSetUpはドメインリロードで再実行されます");
52+
s_wasOneTimeSetUpCalled = true;
3253
}
3354

3455
[UnitySetUp]
3556
public IEnumerator UnitySetUp()
3657
{
37-
Debug.Log("UnitySetUpはドメインリロードで再実行されません");
58+
s_wasUnitySetUpCalled = true;
3859
yield break;
3960
}
4061

4162
[SetUp]
4263
public void SetUp()
4364
{
44-
Debug.Log("SetUpはドメインリロードで再実行されます");
65+
s_wasSetUpCalled = true;
4566
}
4667

4768
[SetUp]
4869
public async Task SetUpAsync()
4970
{
50-
Debug.Log("SetUpAsyncはドメインリロードで再実行されます");
51-
await Task.Delay(1);
71+
s_wasSetUpAsyncCalled = true;
72+
await Task.Yield();
5273
}
5374

5475
[TearDown]
@@ -60,15 +81,34 @@ public void TearDown()
6081
}
6182

6283
[UnityTest]
63-
public IEnumerator EnterPlayModeの使用例()
84+
public IEnumerator EnterPlayModeで再生モードに切り替える例()
6485
{
6586
yield return new EnterPlayMode();
87+
6688
Assert.That(EditorApplication.isPlaying, Is.True);
6789
// Note: 特に後処理をしなくてもテスト終了後に編集モードに戻ります
6890
}
6991

7092
[UnityTest]
71-
public IEnumerator ExitPlayModeの使用例()
93+
public IEnumerator EnterPlayModeで再生モードに切り替える例_InitializeOnEnterPlayModeが実行される()
94+
{
95+
yield return new EnterPlayMode();
96+
// Note: staticフィールドの値はドメインリロードで初期化されます
97+
98+
Assert.That(s_wasInitializeOnEnterPlayModeCalled, Is.True);
99+
}
100+
101+
[UnityTest]
102+
public IEnumerator EnterPlayModeで再生モードに切り替える例_RuntimeInitializeOnLoadMethodが実行される()
103+
{
104+
yield return new EnterPlayMode();
105+
// Note: staticフィールドの値はドメインリロードで初期化されます
106+
107+
Assert.That(s_wasRuntimeInitializeOnLoadMethodCalled, Is.True);
108+
}
109+
110+
[UnityTest]
111+
public IEnumerator ExitPlayModeで編集モードに切り替える例()
72112
{
73113
yield return new EnterPlayMode();
74114
Assume.That(EditorApplication.isPlaying, Is.True);
@@ -78,7 +118,7 @@ public IEnumerator ExitPlayModeの使用例()
78118
}
79119

80120
[UnityTest]
81-
public IEnumerator RecompileScriptsでリコンパイルされたクラスのメソッドを呼び出す例()
121+
public IEnumerator RecompileScriptsでリコンパイルを実行する例_リコンパイルされたクラスのメソッドを呼び出せる()
82122
{
83123
Assume.That(Path.GetFullPath(CsPath), Does.Not.Exist,
84124
"Destination file already exists. please remove and re-run this test.");
@@ -102,7 +142,7 @@ public IEnumerator RecompileScriptsでリコンパイルされたクラスのメ
102142
}
103143

104144
[UnityTest]
105-
public IEnumerator WaitForDomainReloadで追加されたアセンブリのメソッドを呼び出す例()
145+
public IEnumerator WaitForDomainReloadでドメインリロードを待機する例_追加されたアセンブリのメソッドを呼び出せる()
106146
{
107147
Assume.That(Path.GetFullPath(DLLDstPath), Does.Not.Exist,
108148
"Destination file already exists. please remove and re-run this test.");
@@ -120,5 +160,41 @@ public IEnumerator WaitForDomainReloadで追加されたアセンブリのメソ
120160

121161
Assert.That(actual, Is.True);
122162
}
163+
164+
[UnityTest]
165+
public IEnumerator ドメインリロード発生時にOneTimeSetUpは再実行される()
166+
{
167+
yield return new EnterPlayMode();
168+
// Note: staticフィールドの値はドメインリロードで初期化されます
169+
170+
Assert.That(s_wasOneTimeSetUpCalled, Is.True);
171+
}
172+
173+
[UnityTest]
174+
public IEnumerator ドメインリロード発生時にUnitySetUpは再実行さない()
175+
{
176+
yield return new EnterPlayMode();
177+
// Note: staticフィールドの値はドメインリロードで初期化されます
178+
179+
Assert.That(s_wasUnitySetUpCalled, Is.False);
180+
}
181+
182+
[UnityTest]
183+
public IEnumerator ドメインリロード発生時にSetUpは再実行される()
184+
{
185+
yield return new EnterPlayMode();
186+
// Note: staticフィールドの値はドメインリロードで初期化されます
187+
188+
Assert.That(s_wasSetUpCalled, Is.True);
189+
}
190+
191+
[UnityTest]
192+
public IEnumerator ドメインリロード発生時にSetUpAsyncは再実行される()
193+
{
194+
yield return new EnterPlayMode();
195+
// Note: staticフィールドの値はドメインリロードで初期化されます
196+
197+
Assert.That(s_wasSetUpAsyncCalled, Is.True);
198+
}
123199
}
124200
}

Assets/APIExamples/Tests/Editor/UnityTestFramework/UnityTestAttributeExample.cs

Lines changed: 17 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
// Copyright (c) 2021-2023 Koji Hasegawa.
1+
// Copyright (c) 2021-2025 Koji Hasegawa.
22
// This software is released under the MIT License.
33

44
using System;
@@ -12,10 +12,9 @@ namespace APIExamples.Editor.UnityTestFramework
1212
{
1313
/// <summary>
1414
/// フレームをまたがるテストを<see cref="UnityEngine.TestTools.UnityTestAttribute"/>で実装する例
15-
/// <see href="https://github.com/Cysharp/UniTask">UniTask</see>の使用例を含みます
1615
/// </summary>
1716
/// <remarks>
18-
/// Runtime/UnityTestFramework/UnityTestAttributeExampleをベースに、Edit Modeで動くもの
17+
/// <see cref="APIExamples.UnityTestFramework.UnityTestAttributeExample"/> をベースに、Edit Modeテスト向けに修正したもの
1918
/// </remarks>
2019
[TestFixture]
2120
public class UnityTestAttributeExample
@@ -25,6 +24,7 @@ public IEnumerator YieldReturnNullでフレームを送る例()
2524
{
2625
var before = Time.frameCount;
2726
yield return null;
27+
2828
var actual = Time.frameCount;
2929

3030
Assert.That(actual, Is.EqualTo(before)); // Note: Edit Modeテストではそもそもフレームカウントされない
@@ -37,23 +37,26 @@ public IEnumerator YieldBreakの例_テストはパスする()
3737
}
3838

3939
[UnityTest]
40-
[Explicit("Edit ModeテストではWaitForEndOfFrameがエラーとなるため実行対象から除外")]
41-
public IEnumerator YieldInstructionの実装クラスはEditMoteテストでは使用できない_実行時エラー()
40+
[Explicit("Edit Modeテストでは動作しない")]
41+
public IEnumerator YieldInstructionの実装クラス_EditMoteテストでは動作しない()
4242
{
43-
var before = Time.frameCount;
44-
yield return new WaitForEndOfFrame();
45-
var actual = Time.frameCount;
43+
var start = Time.time; // The time at the beginning of this frame
44+
const float WaitSeconds = 0.5f;
45+
yield return new WaitForSeconds(WaitSeconds);
46+
47+
var actual = Time.time - start;
4648

47-
Assert.That(actual, Is.EqualTo(before));
49+
Assert.That(actual, Is.EqualTo(WaitSeconds).Within(0.1f));
4850
}
4951

5052
[UnityTest]
51-
[Explicit("Edit ModeテストではWaitForSecondsRealtimeが動作しないため実行対象から除外")]
52-
public IEnumerator CustomYieldInstructionの実装クラスはEditMoteテストでは使用できない_動作しない()
53+
[Explicit("Edit Modeテストでは動作しない")]
54+
public IEnumerator CustomYieldInstructionの実装クラス_EditMoteテストでは動作しない()
5355
{
5456
var start = Time.time; // The time at the beginning of this frame
5557
const float WaitSeconds = 0.5f;
5658
yield return new WaitForSecondsRealtime(WaitSeconds);
59+
5760
var actual = Time.time - start;
5861

5962
Assert.That(actual, Is.EqualTo(WaitSeconds).Within(0.1f));
@@ -83,6 +86,7 @@ public IEnumerator UniTaskでAsyncメソッドを使用するテストの例() =
8386
public IEnumerator コルーチンを起動してコールバックを受け取る例()
8487
{
8588
var actual = 0;
89+
8690
yield return BarCoroutine(i =>
8791
{
8892
actual = i;
@@ -91,11 +95,12 @@ public IEnumerator コルーチンを起動してコールバックを受け取
9195
Assert.That(actual, Is.EqualTo(1));
9296
}
9397

94-
[Ignore("Edit Modeテストではテストが終了しないため実行対象から除外/ Freeze in the Edit Mode tests")]
9598
[UnityTest]
99+
[Ignore("Edit Modeテストではテストが終了しないため実行対象から除外/ Freeze in the Edit Mode tests")]
96100
public IEnumerator UniTaskでコルーチンを起動してコールバックを受け取る例_EditModeテストではテストが終了しない() => UniTask.ToCoroutine(async () =>
97101
{
98102
var actual = 0;
103+
99104
await BarCoroutine(i =>
100105
{
101106
actual = i;
Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
// Copyright (c) 2021-2022 Koji Hasegawa.
1+
// Copyright (c) 2021-2025 Koji Hasegawa.
22
// This software is released under the MIT License.
33

4-
using NUnit.Framework;
4+
using System.Runtime.CompilerServices;
55

6-
[assembly: Category("APIExamples")]
6+
[assembly: InternalsVisibleTo("APIExample.Editor.Tests")]

0 commit comments

Comments
 (0)