如何将私有方法暴露给单元测试

Ant*_*yrd 1 c# unit-testing .net-4.0

我正在尝试将我的私有方法暴露给单元测试.我在UnitTesting Succintly中看到了这个例子:

public class DoesSomething
{
#if TEST
    public
#else
    private
#endif
    void SomeComputation() {
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我尝试过的,但在尝试通过测试访问时,代码仍然显示为私有.

#if TEST
            public
#else
        private
#endif
        Organization TransformToOrganization(OrgChartOrganizationUnitType org)
        {
            ...
        }
Run Code Online (Sandbox Code Playgroud)

jas*_*son 14

您不应该将私有方法公开给您的测试.你的类的公共方法有一个规范.您的单元测试应该测试您的类的公共方法是否符合该规范.如何在公共的方法去这样做是没有人的业务; 只要您继续遵守公共方法的规范,您希望随意更改您的私有实现.

如果您编写依赖于私有实现的单元测试,您最终会得到非常脆弱的单元测试,这些测试实际上不会添加任何值,因为您需要验证的唯一事情是公开的成员遵守他们的规范.如果在背景中隐藏着小小的小猫,整个过程都会起作用,那也没关系.

  • 好答案!你也可以通过在AssemblyInfo.cs文件中添加一行来使内部可见:`[assembly:InternalsVisibleTo("MyNameSpace.UnitTest")]` (12认同)
  • @jason是的,但你的**私有实现应该仍然有用**,单元测试应该很小.测试一个更大的公共函数,并忽略它调用的私有函数,只是告诉你它所包含的一个私有函数失败了.它没有告诉你哪一个. (7认同)
  • 给小猫+1,并且答案很好. (2认同)