首页 > 后端开发 > C++ > 面对类型差异时,如何有效测试 C# 中的私有方法?

面对类型差异时,如何有效测试 C# 中的私有方法?

Mary-Kate Olsen
发布: 2025-01-18 21:47:10
原创
197 人浏览过

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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板