我正在尝试将我的私有方法暴露给单元测试。我在UnitTesting Succintly中看到了这个例子:
public class DoesSomething
{
#if TEST
public
#else
private
#endif
void SomeComputation() {
}
}
以下是我的尝试,但在尝试通过测试访问时,代码仍显示为私有。
#if TEST
public
#else
private
#endif
Organization TransformToOrganization(OrgChartOrganizationUnitType org)
{
...
}
答案 0 :(得分:14)
您不需要将私有方法公开给您的测试。您的类的 public 方法有一个规范。您的单元测试应该测试您的类的 public 方法是否符合该规范。 公共方法如何做到这一点并不是一个人的事;您希望只要您继续遵守 public 方法的规范,就可以随意更改您的私有实施。
如果您编写依赖于私有实现的单元测试,您最终会得到非常脆弱的单元测试,这些测试实际上并没有添加任何值,因为只有 的东西您需要验证的是公开公开的成员是否遵守其规范。如果在背景中隐藏着小小的小猫,整个过程都有效,那就无所谓了。
答案 1 :(得分:3)
我正在尝试将我的私有方法暴露给单元测试。
你不应该。私有方法就是私有方法。它们完全封装在包含它们的类中,而不是该类的外部接口的一部分。单元测试应验证类的外部接口(或外部可见功能),而不是其私有内部实现。
换句话说,为私有方法编写测试会将测试紧密地耦合到这些对象的特定实现。
当私有方法被对象的面向公众的功能使用时,应间接测试私有方法。如果这些测试中没有涉及它们,您有两种选择:
答案 2 :(得分:2)
您必须正确更改TEST编译常量。这不是内置于VS编译常量的内容,可以为调试/发布配置打开/关闭。