Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 单元测试C语言中一种新的静态保护方法#_C#_Unit Testing_Static_Scope_Protected - Fatal编程技术网

C# 单元测试C语言中一种新的静态保护方法#

C# 单元测试C语言中一种新的静态保护方法#,c#,unit-testing,static,scope,protected,C#,Unit Testing,Static,Scope,Protected,我试图为一个受保护的方法编写一个包装器类,我希望对其进行单元测试。在我的例子中,问题是原始方法被声明为受保护的静态new,这会阻止我访问基本方法,因为它是静态的 有没有其他方法来编写这个包装器方法?如果没有,在不改变其范围的情况下,我必须对该方法进行单元测试的其他选项有哪些 编辑:添加代码: public class DerivedClassToTest : BaseClass { protected static new Type_A MehodeToTest() {

我试图为一个受保护的方法编写一个包装器类,我希望对其进行单元测试。在我的例子中,问题是原始方法被声明为
受保护的静态new
,这会阻止我访问基本方法,因为它是静态的

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

编辑:添加代码:

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

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


谢谢。

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

public class DerivedClassToTestWrapper : DerivedClassToTest
{
    public static Type_A MehodeToTestWrapped()
    {
        return DerivedClassToTest.MehodeToTest();
    }
}
然后在单元测试中:

var actual = DerivedClassToTestWrapper.MehodeToTestWrapped();

此外,我不太确定在成员上使用受保护的静态新的设计目标是什么,但我必须承认,我迄今为止从未在成员上见过这样的访问修饰符。

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

public class DerivedClassToTestWrapper : DerivedClassToTest
{
    public static Type_A MehodeToTestWrapped()
    {
        return DerivedClassToTest.MehodeToTest();
    }
}
然后在单元测试中:

var actual = DerivedClassToTestWrapper.MehodeToTestWrapped();

另外,我不太清楚在成员上使用
受保护的静态new
的设计目标是什么,但我必须承认,到目前为止,我从未在成员上见过这样的访问修饰符。

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

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

FWIW,我认为您正沿着正确的路径“解锁”传统代码,以便以这种方式进行测试。

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

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

FWIW,我认为您正沿着正确的路径“解锁”遗留代码以进行这种方式的测试。

您的单元测试架构特别糟糕:1)静态方法2)带有
new
关键字的隐藏方法……根据您的描述,它应该可以正常工作。请显示不适合您的代码。@Kirill Polishchuk:我同意,但这是一个给定的代码(不是新的),因此此时重构涉及太多的更改,这是不希望的,因为这些代码已经准备好使用。我通常不会对我的
私有保护的
方法进行单元测试。只有
公共的
方法。@gdoron:这对你很好,但这不是我的问题,无论如何,公共方法的常规方法需要太多的优化,所以我从小函数开始,基本上你是对的,但我们不要讨论这个问题。你的单元测试架构特别糟糕:1)静态方法2)带有
new
关键字的隐藏方法…从你描述的来看,它应该可以正常工作。请显示不适合您的代码。@Kirill Polishchuk:我同意,但这是一个给定的代码(不是新的),因此此时重构涉及太多的更改,这是不希望的,因为这些代码已经准备好使用。我通常不会对我的
私有保护的
方法进行单元测试。只有
public
函数。@gdoron:很好,但这不是我的问题,不管怎样,公共方法的正常方式需要太多的优化,所以我从小函数开始,基本上你是对的,但不要讨论这个问题。。它很有效,谢谢你,我正在尝试使用base.MehodeToTest()从我的静态方法来看,这是错误的。thanx againIt是有效的,谢谢,我尝试在我的静态方法中使用base.MehodeToTest(),这是错误的。thanx againUr是的,这是我的错误,我尝试了传统的方法,但没有注意到静态问题,谢谢。你可以说
returnmethodtotest()。不需要使用类名进行限定,但这样做也没有问题。您的helper类继承了该方法,并且没有使用
new
方法隐藏它。没错,这是我的错误,我尝试了传统方法,但没有注意到静态问题,谢谢。您可以说
return MethodToTest()。不需要使用类名进行限定,但这样做也没有问题。您的helper类继承该方法,并且不会使用
new
方法隐藏它。