首页 > 后端开发 > C++ > 如何在 C# 中有效地对私有方法进行单元测试?

如何在 C# 中有效地对私有方法进行单元测试?

Patricia Arquette
发布: 2025-01-18 21:42:10
原创
815 人浏览过

How Can I Effectively Unit Test Private Methods in C#?

单元测试私有 C# 方法:挑战和解决方案

在 C# 中直接对私有方法进行单元测试是有问题的,因为它们是封装的。虽然 Visual Studio 生成访问器类来帮助解决此问题,但可能会发生运行时错误,例如与私有列表交互时对象转换失败。 这通常源于访问器类和目标类之间的类型不匹配。

问题:

一种常见的情况是单元测试在执行过程中失败,因为在尝试将项目添加到私有列表时出现对象转换错误。访问器类的列表类型与原始类的列表类型不同。

解决问题:

已弃用的方法:PrivateObject 类:

在 .NET Core 2.0 之前的 .NET 版本中,PrivateObject 类提供了一种调用私有方法的方法:

<code class="language-csharp">Class target = new Class();
PrivateObject obj = new PrivateObject(target);
var retVal = obj.Invoke("PrivateMethod");
Assert.AreEqual(expectedVal, retVal);</code>
登录后复制

重要提示: PrivateObjectPrivateType 在 .NET Core 2.0 及更高版本中不再受支持。

更好的选择:

最佳实践通常不鼓励直接测试私有方法。 以下是原因以及该怎么做:

  • 通过公共方法进行间接测试:专注于测试公共接口。如果您的公共方法正常工作,那么支持它们的私有方法也可能是正确的。
  • 避免测试中的状态更改:单元测试理想情况下不应更改被测对象的内部状态。 专注于根据特定输入验证输出。
  • 使用模拟对象:模拟提供了一个受控环境来测试私有方法的交互和输出,而无需直接访问。
  • 避免使用反射:虽然反射允许访问私有成员,但它很复杂,容易出错,并且通常不建议用于单元测试。 它使测试变得脆弱且难以维护。

以上是如何在 C# 中有效地对私有方法进行单元测试?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板