ホームページ > バックエンド開発 > C++ > 型の不一致に直面した場合、C# でプライベート メソッドを効果的にテストするにはどうすればよいですか?

型の不一致に直面した場合、C# でプライベート メソッドを効果的にテストするにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2025-01-18 21:47:10
オリジナル
194 人が閲覧しました

How Can I Effectively Test Private Methods in C# When Facing Type Discrepancies?

C# プライベート メソッド テスト

完全なコード カバレッジを実現するには、プライベート メソッドをテストする必要があります。 1 つの方法は、Visual Studio によって生成されたアクセサー クラスを使用することです。ただし、この方法では、型の不一致により実行時エラーが発生する可能性があります。

次のコード スニペットを考えてみましょう:

<code class="language-csharp">// 在MyProj项目中
class TypeA
{
    private List<TypeB> myList = new List<TypeB>();

    private class TypeB
    {
        public TypeB()
        {
        }
    }

    public TypeA()
    {
    }

    private void MyFunc()
    {
        // 更改实例状态的myList处理
    }
}</code>
ログイン後にコピー

質問:

プライベート メソッド MyFunc の単体テストが実行時に次のエラーで失敗します:

<code>无法将类型为'System.Collections.Generic.List`1[MyProj.TypeA.TypeA_Accessor+TypeB]'的对象转换为类型为'System.Collections.Generic.List`1[MyProj.TypeA.TypeA+TypeB]'的对象。</code>
ログイン後にコピー

これは、アクセサー クラスが、異なる型パラメーターを使用して myList の異なる実装を生成するためです。

解決策:

2.0 より前のバージョンの .NET Core では、PrivateObject クラスを使用してプライベート メソッドを呼び出すことができます。

<code class="language-csharp">// 在TestMyProj项目中
public void MyFuncTest()
{
    TypeA target = new TypeA();
    PrivateObject obj = new PrivateObject(target);
    // 下一行不会抛出异常
    obj.Invoke("myList", new object[] { new TypeA_Accessor.TypeB() });
    obj.Invoke("MyFunc");

    // 检查target的更改状态
}</code>
ログイン後にコピー

ただし、.NET Core 2.0 以降では、PrivateObject と PrivateType のサポートが削除されました。この場合、コードをリファクタリングしてプライベート メソッドをテスト可能にするか、リフレクション ベースのアプローチを採用することを検討してください。

以上が型の不一致に直面した場合、C# でプライベート メソッドを効果的にテストするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート