我有一个如下结构的C#类
public class ClassA{
protected ClassA(double[] number){
}
public double methodofClassA(){
}
}
字符串
我想调用methodofClassA()
对该方法进行单元测试。但是,由于受保护的构造函数,我无法这样做。在遗留代码中,他们使用了访问器。但由于其在最新版本的.NET Framework中被弃用,如何解决这个问题并在删除访问器后测试该方法?
Tia
2条答案
按热度按时间bttbmeg01#
您可以通过继承使CTOR可访问您的测试工具:
字符串
See also this Fiddle
由于受保护的CTOR对于继承被测类的类来说是可访问的,所以您所需要做的就是从它派生,并且您应该能够通过这种间接方式执行所有测试。
另一个问题是:你真的需要这样做吗?如果你测试派生类,这个基础应该已经覆盖了很多。
rbpvctlc2#
一般来说,你应该测试类的公共API。所以你应该像类的其他用户一样创建类。如果类只打算作为基类,测试派生类。
如果一个类只是一个更大的类的一部分,那么你可能测试错了“单元”。单元测试中的“单元”可以是任何大小,它不一定是一个类。它可以是一些内部紧密耦合的类的集合,或者是一个完整的程序集,如果它有一个足够简单的公共API,或者是一个单一的方法。
也就是说,在某些情况下,你只需要一个实用的解决方案来解决特定的问题。在这种情况下,我倾向于只提供一个明确命名的公共方法。
字符串
您可以将这些方法设置为
internal
,并使用InternalsVisibleToAttribute仅将这些方法公开给您的测试程序集。这可能对任何类型的“公共”API特别有用,其中代码可能被外部人员使用。