带有私有构造函数的c#单元测试类

本文关键字:单元 单元测试 测试类 构造函数 | 更新日期: 2023-09-27 18:06:03

好的,所以我刚刚得到了一个分配,我必须在一个私有构造函数的类上执行单元测试。

当所有的方法都是非静态的时候,我该如何在不初始化类的情况下进行单元测试呢?

是否有任何方法我可以做单元测试(没有反射)的类与一个私有构造函数?

带有私有构造函数的c#单元测试类

如果您不能将类设置为公共的,您仍然可以通过这样创建一个实例来轻松地测试它:

var anInstance = (YourPrivateClass)Activator.CreateInstance(typeof(YourPrivateClass), true);

这将给你一个你可以填充的类的实例。

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

[assembly: InternalsVisibleTo("YourSolution.Tests")]

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

单元测试是用来测试什么是被公众使用的——例如,通过在应用层之间的接口代码。取一个输入,我想要这个输出。这就是单元测试的真正意义所在。单元测试并不关心实际方法中的内容。只要它返回你想要的,执行你想要的操作,你就通过了。

您应该通过公共API进行测试——必须有某种方式来实例化和使用您想要测试的类。

通常编写和运行单元测试以确保代码符合其设计并按预期行为。

创建一个不能在其上创建实例的non-static类,即只有私有构造函数,可能永远都没有用,换句话说,它永远不是Unit Testable

为了单元可测试:

  1. 你应该能够创建一个类的实例。
  2. 可测试函数应该是Public或Internal。您可以通过将程序集设置为友元程序集来测试内部函数

它可能是一个单例,而您不需要该类的公共构造函数。用:装饰构造函数:div [ExcludeFromCodeCoverage]