私の会社では、MSTest と NUnit を使用しています。現在、NUnit のみを使用するように切り替えています。コードにはアーキテクチャ上の問題が山積しているため、それらを無視して、実際に機能させる方法に取り組むことができます。主な問題は、データベース接続の設定が ConfigurationManager.AppSettings[] から直接取得されることだと思います。この場合、「SettingsFile」パスです。これは、マスター構成ファイルへのパスです。
私がそれを持ち出す理由は、その「SettingsFile」が存在する場合、NUnit エラーが発生し、SettingsFile2 という名前を付けてもエラーにならないためです。コード内の参照の名前も変更したため、引き続き機能し、エラーは発生しなくなりました。
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
アップデート:
CORE プロジェクトへの参照を追加すると、問題が発生します。コア プロジェクトは、SettingsFile 属性を読み取るプロジェクトです。何かが SettingsFile にアクセスする前に IO ファイルの書き込みを配置したことに注意してください。何もログに記録されませんでした。CORE プロジェクトで静的クラス コンストラクターを検索しました。ありません。参照を追加するとこれが壊れる理由がわかりません。
アップデート:
coderush の Unit Test Runner が更新されず、正しいテストが表示されません。構成設定を「SettingsFile2」に変更したため、テストは正常に実行され、ユニット テスト ランナーは正しく更新されます。しかし、テストを右クリックしてテストに移動するとすぐに、これまでに存在したすべてのテストが表示され、現在は削除されています。
もう 1 つ奇妙なことがあります。Coderush は結果を 2 回出力していますが、テストは 1 回しか実行していません。
テストを検索しています... 合計テスト数: 2、フィルター済み: 1
CanConfirmDatabaseMatchesMappings が失敗しました: ... CanConfirmDatabaseMatchesMappings が失敗しました: ...