2

I'm trying to expose my private method to unit testing. I saw this example in UnitTesting Succintly:

public class DoesSomething
{
#if TEST
    public
#else
    private
#endif
    void SomeComputation() {
    }
}

Here is my attempted at it but the code still appears private when trying to access via test.

#if TEST
            public
#else
        private
#endif
        Organization TransformToOrganization(OrgChartOrganizationUnitType org)
        {
            ...
        }
4

3 回答 3

14

您不需要将私有方法公开给您的测试。你的类的公共方法有一个规范。您的单元测试应该测试您的类的公共方法是否符合该规范。公共方法如何做到这一点与任何人无关;只要您继续遵守公共方法的规范,您就可以随意更改您的私有实现。

如果你编写依赖于私有实现的单元测试,你最终会得到非常脆弱的单元测试,实际上并没有增加任何价值,因为你唯一需要验证的是公开的成员是否遵守他们的规范。如果有小猫在后台跑来跑去让整个事情正常工作,那没关系。

于 2013-08-01T15:14:16.940 回答
2

您必须正确更改 TEST 编译常量。这不是内置到 VS 编译常量中的,这些常量可以为调试/发布配置打开/关闭。

于 2013-08-01T15:13:38.810 回答
2

我正在尝试将我的私有方法公开给单元测试。

你不应该。私有方法就是这样,私有的。它们完全封装在包含它们的类中,而不是该类的外部接口的一部分。单元测试应该验证类的外部接口(或外部可见的功能),而不是它的私有内部实现。

换句话说,为私有方法编写测试将测试与这些对象的特定实现紧密结合。

当对象的面向公众的功能使用私有方法时,它们应该被间接测试。如果这些测试未涵盖它们,您有两种选择:

  • 有功能没有被测试,所以测试是不完整的。或者;
  • 未使用私有方法,应将其删除。
于 2013-08-01T15:14:27.003 回答