[英]How can I inherit an inner class using an abstract base class?
我正在尝试创建一个测试类,该类使用内部类来组织其测试方法。 我希望该类是抽象的,具有设置静态属性的能力,以便可以注入此属性。 这是我正在谈论的示例:
[TestClass]
public abstract class BaseUnitTest
{
public static string InjectedProperty;
public static string GetInjectedString()
{
return InjectedProperty;
}
[TestClass]
public class WhenFoo
{
[TestMethod]
public void TestFoo()
{
string str = GetInjectedString();
}
}
}
[TestClass]
public class DeriverdUnitTest : BaseUnitTest
{
[ClassInitialize]
public void SetUp()
{
InjectedProperty = "Injected Property";
}
}
但是,我在单元测试视图中看不到DerivedUnitTest + WhenFoo + TestFoo()类。 我使用的是Visual Studio2010。我猜测当我覆盖BaseUnitTest时,也不会覆盖它的内部类。 我想我可以使它的内部类抽象化,并在以后重写它们,但是随着测试类复杂性的增加,这将变得很烦人。 有人可以解释为什么会发生这种情况,我该如何解决?
谢谢。
编辑:
我觉得我需要更好地解释我这样做的原因。 我们想实施一个测试标准,其名称非常冗长。 因此,测试类将如下所示:
[TestClass]
public abstract class BaseUnitTest
{
public static string InjectedProperty;
public static string GetInjectedString()
{
return InjectedProperty;
}
[TestClass]
public class WhenFooIsCalled
{
[TestClass]
public class AndTheArgumentIsNull
{
[TestMethod]
public void AnArgumentNullExceptionShouldBeThrown()
{
string str = GetInjectedString();
}
}
}
}
这样的好处是,当您在Visual Studio中打开测试视图并显示方法名称和类名称列时,您将获得如下所示的内容:
BaseUnitTest+WhenFooIsCalled+AndTheArgumentIsNull AnArgumentNullExceptionShouldBeThrown()
这样一来,就可以很容易地看出在数百个通过测试中应该执行的失败测试是什么。
我希望能够覆盖抽象的BaseUnitTest的主要原因是,当我执行BaseUnitTest中包含的所有测试时,都将它们全部添加到DerivedUnitTest中并显示在Visual Studio的“测试视图”中。
再次感谢。
在C#语言中,嵌套类与嵌套类没有特殊关系。 这是完全不同的类型。 您这样做的理由只有一个:可以将类声明为私有。 这可以帮助您创建一个小工人阶级来代表外部阶级完成工作,外部阶级从外面是完全看不见的。 非常有用,您不能在外部类范围内声明私有类,您可以做的最好是内部的。
随之而来的是,它绝不会在外部类的继承中起作用。 从外部派生的类根本看不到基类内部的嵌套类。 这样做的目的是,将其声明为私有是首先将其嵌套的原因。
平底锅:如果您需要派生类中的该类,只需将其声明为内部或公共类即可。
嵌套类型不能那样工作。 您不能“替代”类型。
目前尚不清楚您要在这里实现什么,但我认为它没有用。
您可以使用xUnit.NET和SubSpec重新完成那种丰富,冗长的BDD风格的测试。 这些天,SubSpec包含在xUnit.NET Extras下载中。 您可以在以下文章中了解有关SubSpec和BDD测试的更多信息:
http://haacked.com/archive/2008/08/24/introducing-subspec.aspx
如何使用配置文件? 例如
[TestClass]
public class WhenFoo
{
[TestMethod]
public void TestFoo()
{
string str = ConfigurationManager.AppSettings["WhenFooTestFooString"];
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.