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
方法隐藏它。