C#单元测试类与私有构造函数?

Win*_*der 7 .net c# nunit unit-testing

好的,所以我得到了一个任务,我必须在一个私有构造函数的类上进行单元测试.

现在,如果所有方法都是非静态的,我怎么想在没有初始化类的情况下进行单元测试.

有没有办法我可以在一个私有构造函数的类上进行单元测试(没有反射)?

小智 13

如果你不能公开这个类,你仍然可以通过这种方式创建一个实例来轻松测试它:

var anInstance = (YourPrivateClass)Activator.CreateInstance(typeof(YourPrivateClass), true);
Run Code Online (Sandbox Code Playgroud)

这将为您提供一个您可以填充的类的实例.

另一个有用的测试位是,如果您有内部方法(非私有),您可以通过使测试类可见内部来访问它们.您可以使用内部方法在类的assemblyinfo.cs中添加此行:

[assembly: InternalsVisibleTo("YourSolution.Tests")]
Run Code Online (Sandbox Code Playgroud)


rhu*_*hes 8

如果这个类有一个私有构造函数,这个是公开使用的吗?如果没有,最好不要进行单元测试.如果是这种情况,那么公共代码应该通过调用它来测试这段代码.

单元测试用于测试公众使用的内容 - 例如,通过在应用层之间连接代码.接受输入,我想要这个输出.这就是单元测试的真正含义.单元测试并不关心实际方法中的内容.只要它返回你想要的,执行所需的动作,你就有一个通行证.

  • @WinCoder那你到底怎么用它? (6认同)
  • 私有构造函数可用于保护状态,例如 DDD 实体的情况,同时使实体框架等库仍然可以实例化该类。而公共构造函数仅带有可以实例化处于有效状态的实体的参数。通过私有构造函数创建(无效)实体足以测试各个方法的行为。尝试模拟实体的所有其他要求是不必要的设置(其中许多实体都有自己的私有或内部构造函数)... (2认同)