8

好的,所以我刚刚得到一个任务,我必须对具有私有构造函数的类执行单元测试。

现在,当所有方法也是非静态的时,我想如何在不初始化类的情况下进行单元测试。

有什么方法可以对具有私有构造函数的类进行单元测试(不进行反射)?

4

5 回答 5

15

如果您无法公开该类,您仍然可以通过以下方式创建它的实例来轻松测试它:

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

这将为您提供一个类的实例,然后您可以填充该实例。

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

[assembly: InternalsVisibleTo("YourSolution.Tests")]
于 2013-04-11T20:56:55.037 回答
8

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

单元测试用于测试公众使用的内容——例如,通过在应用程序层之间连接代码。输入,我想要这个输出。这就是单元测试的真正意义所在。单元测试并不关心实际方法中的内容。只要它返回您想要的内容,执行所需的操作,您就可以通过。

于 2013-03-27T16:27:40.477 回答
2

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

于 2013-03-27T16:25:54.337 回答
0

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

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

为了可单元测试:

  1. 您应该能够创建该类的实例。
  2. 可测试函数应该是Public 或 Internal。您可以通过将您的程序集作为朋友程序集来测试内部功能
于 2013-03-27T17:08:08.103 回答
0

它可能是一个单例,并且您不想要该类的公共构造函数。用以下方式装饰构造函数:[ExcludeFromCodeCoverage]

于 2013-05-28T19:58:34.923 回答