如何向单元测试公开私有方法

本文关键字:有方法 单元测试 | 更新日期: 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编译常量中的常量,这些常量可以为调试/发布配置打开/关闭。

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

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

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

当对象的面向公共的功能使用私有方法时,应该间接测试它们。如果这些测试不包括它们,你有两个选择:

  • 存在未测试的功能,因此测试不完整。或者
  • 私有方法没有被使用,应该删除