单元测试C#中一个受保护的静态新方法



我正试图为一个受保护的方法编写一个包装类,我希望对该方法进行单元测试。在我的例子中,问题是原始方法被声明为protected static new,这使我无法访问基方法,因为它是静态的。

有没有其他方法可以编写这个包装器方法?如果没有,在不改变其范围的情况下,我还需要其他哪些选项来对该方法进行单元测试?

编辑:添加代码:

public class DerivedClassToTest : BaseClass
{
    protected static new Type_A MehodeToTest()
    {
        Type_A A = new Type_A
        {
            //DoSomething...
        };
        return A;
    }
}

如何测试MehodeToTest

我试图从我的Unitest中的DerivedClassToTest派生,这样我就可以访问受保护的方法,但它是静态的,所以我不能调用base.MethodToTest我如何访问MethodToTest

谢谢。

您可以在单元测试项目中编写一个包装器来公开方法:

public class DerivedClassToTestWrapper : DerivedClassToTest
{
    public static Type_A MehodeToTestWrapped()
    {
        return DerivedClassToTest.MehodeToTest();
    }
}

然后在单元测试中:

var actual = DerivedClassToTestWrapper.MehodeToTestWrapped();

此外,我不太确定在成员上使用protected static new的设计目标是什么,但我必须承认,到目前为止,我从未在成员上见过这样的访问修饰符。

您的方法很好,但是base限定符仅适用于实例方法。你可以像访问任何其他静态方法一样访问静态测试方法:

public class HelperClassToAccessMethodeToTest : DerivedClassToTest
{
       public static Type_A MehodeToTestWrapped()        
       {            
           return DerivedClassToTest.MehodeToTest();        
       }  
}

FWIW,我认为您正在遵循正确的路径来"解锁"传统代码,以这种方式进行测试。

相关内容

最新更新