好的,所以我刚刚得到一个任务,我必须对具有私有构造函数的类执行单元测试。
现在,当所有方法也是非静态的时,我想如何在不初始化类的情况下进行单元测试。
有什么方法可以对具有私有构造函数的类进行单元测试(不进行反射)?
好的,所以我刚刚得到一个任务,我必须对具有私有构造函数的类执行单元测试。
现在,当所有方法也是非静态的时,我想如何在不初始化类的情况下进行单元测试。
有什么方法可以对具有私有构造函数的类进行单元测试(不进行反射)?
如果您无法公开该类,您仍然可以通过以下方式创建它的实例来轻松测试它:
var anInstance = (YourPrivateClass)Activator.CreateInstance(typeof(YourPrivateClass), true);
这将为您提供一个类的实例,然后您可以填充该实例。
另一个有用的测试位是,如果您有内部方法(不是私有的),您可以通过使内部对您的测试类可见来访问它们。您使用内部方法在类的 assemblyinfo.cs 中添加这一行:
[assembly: InternalsVisibleTo("YourSolution.Tests")]
如果这个类有一个私有构造函数,这是要公开使用的吗?如果没有,最好不要对其进行单元测试。如果是这种情况,公开的代码应该通过调用它来测试它本身。
单元测试用于测试公众使用的内容——例如,通过在应用程序层之间连接代码。输入,我想要这个输出。这就是单元测试的真正意义所在。单元测试并不关心实际方法中的内容。只要它返回您想要的内容,执行所需的操作,您就可以通过。
您应该通过公共 API 进行测试——必须以某种方式实例化和使用您要测试的类。
通常编写和运行单元测试以确保代码符合其设计并按预期运行。
创建一个non-static
不能在其上创建实例的类,即仅私有构造函数,可能永远不会有用,换句话说,它是 never Unit Testable
。
为了可单元测试:
它可能是一个单例,并且您不想要该类的公共构造函数。用以下方式装饰构造函数:[ExcludeFromCodeCoverage]