質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

Q&A

解決済

1回答

2899閲覧

Unity Test Runnerの使い方(名前空間について)

Tomo0225

総合スコア67

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Unity

Unityは、Unity Technologiesが開発・販売している、IDEを内蔵するゲームエンジンです。主にC#を用いたプログラミングでコンテンツの開発が可能です。

0グッド

0クリップ

投稿2021/07/04 10:36

初めてUnityで単体テストをしようと思いこちらの記事(https://light11.hatenadiary.com/entry/2020/02/21/212657)を参考にしてUnity Test Runnerを使い始めました。
そこでAssembly Definition Fileが入っているTestsフォルダーの中にテスト用のスクリプトを配置しました。
元々このゲームはnamespace としてBattleSceneとBattleScene.Magicがありその中のスクリプトをテストするため以下のように記述しました。

using System.Collections; using UnityEngine.TestTools; using NUnit.Framework; using System; using System.Collections; using System.Collections.Generic; using System.Linq; using System.Security.Cryptography; using System.Text; using UnityEngine; using UnityEngine.UI; using BattleScene; using BattleScene.Magic;

そうしたところThe type or namespace name 'BattleScene' could not be foundのエラーメッセージが出てしまいます。
なぜでしょうか?
またTestsフォルダー下にあるテスト用スクリプトをテスト対象のスクリプトが入っているBattleSceneという名前のフォルダーに移動させると以下のようなエラーメッセージに変わります。
The type or namespace name 'UnityTest' could not be found
The type or namespace name 'UnityTestAttribute' could not be found

スクリプトを配置するフォルダーとnamespsceは関係があるのでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

スクリプトを配置するフォルダは、namespaceというよりもアセンブリと関係しているかと思います。テスト対象のスクリプトはどのアセンブリに所属しているでしょうかね?

テスト対象の置かれているフォルダと同階層か、あるいはそれより上の階層にAssembly Definition Fileを作成した覚えがなければテスト対象はAssembly-CSharpに所属しているかと思いますが、「Missing reference between 'Assembly-CSharp' and 'Tests' assembly, created with Assembly Definition - Unity Answers」とか「【Unity】Test Runner で自動テストを試してみようとしたら CS0246 エラーが出て困ってしまった | パパコーダー」といった記事を見ますに、その状態だとテストはできないかもしれませんね。

テスト対象と同階層に新しくAssembly Definition Fileを作成し、Testsからはそのアセンブリを参照するように設定すればテストできるようになるんじゃないかと思います。ですがそのテスト対象がさらに別のスクリプトを使用しており、それがAssembly-CSharpに所属していればそれにもAssembly Definition Fileを作って...と芋づる式にアセンブリを整理してやらないといけないかもしれません(「Unity Assembly Definition 完全に理解した - Qiita」だとかの記事がご参考になるでしょうか?)。

おそらくきっちり整理してやるのが順当のように思いますが、スクリプト同士がスパゲッティ状に関連していて面倒すぎる場合は、プロジェクトのAssetsフォルダ直下にAssembly Definition Fileを作ってスクリプト類をまとめて一つのアセンブリに所属させるという手をとるのも致し方ないかもしれませんね。
Assets直下にAssembly Definition Fileを作り、その他のアセットを動作させるために必要なアセンブリがあればAssembly Definition Referencesに追加、その他必要に応じて項目を設定しエラーなく動作するようにした上で...

図1

それをTestsのAssembly Definition Referencesに追加してやればいかがでしょうか。

図2

投稿2021/07/06 20:23

Bongo

総合スコア10807

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Tomo0225

2021/07/07 05:34

回答ありがとうございます。 プロジェクトのAssetsフォルダ直下にAssembly Definition Fileを作ってスクリプト類をまとめて一つのアセンブリに所属させる←この方法でエラー解消できました。分かりやすく画像もつけていただき助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問