C# 単体テストのプライベート メソッド: 実行時エラーの回避
C# では、Visual Studio の自動生成されたアクセサー クラスを使用してプライベート メソッドを単体テストできます。ただし、これらのテストを通じてオブジェクトの内部状態を操作しようとすると、実行時エラーが発生する可能性があります。
根本的な問題
提供されたコードで発生したエラーは、コンパイル時には TypeA_Accessor として扱われるアクセサー クラスのターゲットが、実行時には TypeA として扱われることが原因です。この不一致により、リストのタイプが異なるため、target.myList に対する Add() 操作が失敗します。
エラーの解決
.NET Core 2.0 より前のバージョンでは、PrivateObject クラスを使用してプライベート メソッドにアクセスできます。これには次の手順が必要です:
<code class="language-csharp">Class target = new Class(); PrivateObject obj = new PrivateObject(target); var retVal = obj.Invoke("PrivateMethod"); Assert.AreEqual(expectedVal, retVal);</code>
代替方法
プライベート メソッドを直接テストする代わりに、次の代替方法を検討してください:
PrivateObject と PrivateType のサポートは .NET Core 2.0 以降では削除されており、新しいバージョンのフレームワークではプライベート メソッドにアクセスしてテストするには代替メソッドが必要であることに注意してください。
以上がC# でプライベート メソッドを単体テストし、ランタイム エラーを回避するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。