首页 >后端开发 >C++ >如何在 C# 中对私有方法进行单元测试并避免运行时错误?

如何在 C# 中对私有方法进行单元测试并避免运行时错误?

Barbara Streisand
Barbara Streisand原创
2025-01-18 21:51:09404浏览

How Can I Unit Test Private Methods in C# and Avoid Runtime Errors?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn