私の会社はMSTestとNUnitを使用しています。私は今、NUnitだけを使用するように私たちを切り替えています。 コードはアーキテクチャ上の問題を抱えているため、これらのコードを無視して、実際に動作させる方法について作業します。主な問題は、データベース接続の設定がConfigurationManager.AppSettings []から直接引き出されることです。この場合、 "SettingsFile"パス。これは、マスター構成ファイルへのパスです。NUDDは、Visual Studioでcoderushまたはtestdriven.netを実行しています。 "no tests found"
私はそれを持ち出す理由は、その "SettingsFile"が存在するとき、NUnitエラーです.SettingFile2に名前を付けるとエラーにならないからです。私はまた、私のコードでそれへの参照の名前を変更するので、それはまだ動作します、それだけでもうエラーはありません。
NUnitがエラーをスローすると、テストが見つかりません。
「SettingsFile」は、NUnit用に予約されているappSettingのようなものだと思っていましたが、それほど珍しいとは言えませんが、そのようなものは何も見つかりませんでした。
完全に空白のプロジェクトも作成しました。テストC#テストテンプレートプロジェクトを追加し、nunitテストを追加し、app.configを追加してテストし、それがうまくいった。私も同じapp.config設定をしていました。
繰り返し入力してください: テストプロジェクトのapp.configに入り、key = "SettingsFile"をkey = "SettingsFile2"に変更してから、設定クラスをConfigurationManager.AppSettings ["SettingsFile2" ]何も変えなければ、正しくビルドされます。なぜこうなった?
解決策は、appSettingsに「SettingsFile」という単語を使用しないことですが...私たちの実稼働サーバー、テストサーバー、ステージングサーバー、開発サーバーなどはすべて既に実行しています。それらをすべて更新する簡単な方法ですが、私たちもそれを持っているなら、私はマネージャーに私の主張を言わなければなりません。 DXCoreテストから
出力:
Testing started:
Exception:
Message: Exception has been thrown by the target of an invocation.
Source: mscorlib
StackTrace:
at System.RuntimeMethodHandle._InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, SignatureStruct& sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
at System.RuntimeMethodHandle.InvokeMethodFast(IRuntimeMethodInfo method, Object target, Object[] arguments, Signature sig, MethodAttributes methodAttributes, RuntimeType typeOwner)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, Boolean skipVisibilityChecks)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
at CR_ExtUnitTestRunner.Invoker.InvokeInThread()
InnerException:
Exception:
Message: Error loading settings file
Source: nunit.util
StackTrace:
at NUnit.Util.XmlSettingsStorage.LoadSettings()
at NUnit.Util.SettingsService..ctor(Boolean writeable)
at NUnit.Util.SettingsService..ctor()
at CR_NUnitTesting.Executor.Initialize()
at CR_NUnitTesting.Executor.Execute(ExecuteTestData data)
at CR_NUnitTesting.NUnitExtension.Execute(Int32 major, Int32 minor, ExecuteTestData data)
at CR_NUnitTesting.NUnitExtension.<InitializePlugIn>b__2(ExecuteTestData data)
InnerException:
Exception:
Message: Object reference not set to an instance of an object.
Source: nunit.util
StackTrace:
at NUnit.Util.XmlSettingsStorage.LoadSettings()
No tests found.
Duration : 5.25776431101399
UPDATE:
中核プロジェクトへの参照を追加するには、問題が発生します。 コアプロジェクトは、SettingsFile属性を読み取るプロジェクトです。 IOファイル書き込みは、何もSettingsFileにアクセスする前に行い、何も記録されていないことに注意してください。 COREプロジェクトで静的クラスのコンストラクタが検索されました。誰もいません。 なぜリファレンスを追加するとこれが問題になるのかわかりません。
UPDATE:
のCodeRushでユニットテストランナーが正しいテストを表示するように更新されません。 設定が「SettingsFile2」に変更されたため、テストが正常に実行され、ユニットテストランナーが正しく更新されます。しかし、すぐにテストをクリックしてテストに行くとすぐに、これまで存在していたすべてのテストが削除されたことが表示されます。
もう1つthats odd: Coderushは結果を2回印刷しますが、テストを1回だけ実行します。テストの検索
... 総テスト:2、フィルター:1
CanConfirmDatabaseMatchesMappingsに失敗しました: は... CanConfirmDatabaseMatchesMappingsに失敗しました: を...
どのように再現できましたか?私は空白の解決策で再現しようとしました。 – BradLaney
私はTest Runnerの開発者に調べてもらうように頼みました。彼らは、 "no tests found"という問題が再現されたと回答しました。問題のステータスが変更されたら、詳細を返信します。 –
この問題に関する追加情報を示します。 CodeRush Unit Test Runnerがテストを実行すると、Path.GetDirectoryName(TestAssembly)として検出されたTestAssemblyPathにDirectory.CurrentDirectory値を設定します。 NUnit SettingsServiceは、ConfigurationManager.AppSettings ["SettingsFile"]からファイル名の設定を取得しようとします。 TestAssemblyPathは.configファイルが含まれている場合 したがって、(例えば、それは、以下に示す通りである): <追加キー= "SettingsFile" 値= "[SettingsFileDirectory] \ Settings.settings" /> のappSettings> –