如何向单元测试公开私有方法
本文关键字:有方法 单元测试 | 更新日期: 2023-09-27 18:25:46
我正试图将我的私有方法公开给单元测试。我在UnitTestingSuccessly:中看到了这个例子
public class DoesSomething
{
#if TEST
public
#else
private
#endif
void SomeComputation() {
}
}
这是我尝试过的,但当尝试通过测试访问时,代码仍然显示为私有代码。
#if TEST
public
#else
private
#endif
Organization TransformToOrganization(OrgChartOrganizationUnitType org)
{
...
}
您不需要向测试公开私有方法。类的公共方法有一个规范。单元测试应该测试类的公共方法是否符合该规范。公共方法如何做到这一点与任何人无关;只要您继续遵守公共方法的规范,您就可以随意更改私有实现。
如果您编写的单元测试依赖于私有实现,那么您最终会得到非常脆弱的单元测试,这些测试实际上不会添加任何值,因为唯一需要验证的是公开成员遵守其规范。如果有小猫躲在后台跑来跑去,让整件事发生,那也没关系。
您必须正确更改TEST编译常量。这不是一个内置到VS编译常量中的常量,这些常量可以为调试/发布配置打开/关闭。
我正试图将我的私有方法公开给单元测试。
你不应该。私有方法就是这样,私有的。它们被完全封装在包含它们的类中,而不是该类的外部接口的一部分。单元测试应该验证类的外部接口(或外部可见的功能),而不是它的私有内部实现。
换句话说,为私有方法编写测试将测试与这些对象的特定实现紧密耦合。
当对象的面向公共的功能使用私有方法时,应该间接测试它们。如果这些测试不包括它们,你有两个选择:
- 存在未测试的功能,因此测试不完整。或者
- 私有方法没有被使用,应该删除