好的,所以我得到了一个任务,我必须在一个私有构造函数的类上进行单元测试。
现在,如果所有方法都是非静态的,我怎么想在没有初始化类的情况下进行单元测试。
有没有办法可以在带有私有构造函数的类上进行单元测试(没有反射)?
答案 0 :(得分:11)
如果你不能公开课,你仍然可以通过这种方式创建一个实例来轻松测试它:
var anInstance = (YourPrivateClass)Activator.CreateInstance(typeof(YourPrivateClass), true);
这将为您提供一个您可以填充的课程实例。
另一个有用的测试位是,如果您有内部方法(非私有),您可以通过使测试类可见内部来访问它们。您可以使用内部方法在类的assemblyinfo.cs中添加此行:
[assembly: InternalsVisibleTo("YourSolution.Tests")]
答案 1 :(得分:8)
如果此类具有私有构造函数,是否可以公开使用?如果没有,最好不要进行单元测试。如果是这种情况,那么公共代码应该通过调用它来测试这段代码。
单元测试用于测试公众使用的内容 - 例如,通过在应用层之间连接代码。接受输入,我想要这个输出。这就是单元测试的真正含义。单元测试并不关心实际方法中的内容。只要它返回你想要的,执行所需的动作,你就有一个传球。
答案 2 :(得分:2)
您应该通过公共API进行测试 - 必须有一些方式来实例化和使用您要测试的类。
答案 3 :(得分:0)
通常编写并运行单元测试,以确保代码符合其设计并按预期运行。
创建一个non-static
类,你不能在其上创建一个实例,即私有构造函数,可能永远不会有用,换句话说,它永远不会Unit Testable
。
为了进行单元测试:
答案 4 :(得分:0)
它可能是一个单例,你不需要该类的公共构造函数。 用以下内容装饰构造函数: [ExcludeFromCodeCoverage]