首頁 > 後端開發 > 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#私有方法檢定

為了實現全面的程式碼覆蓋率,需要測試私有方法。一種方法是使用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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板