2

我正在尝试创建一个使用内部类组织其测试方法的测试类。我希望这个类是抽象的,能够设置一个静态属性,以便可以注入这个属性。这是我正在谈论的一个例子:

[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 Studio 2010。我猜当我覆盖 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 的测试视图中。

再次感谢。

4

4 回答 4

3

在 C# 语言中,嵌套类与其嵌套的类没有特殊关系。这是一个完全不同的类型。您这样做只有一个充分的理由:您可以将类声明为私有的。这可以帮助您创建一个小工人阶级来代表外部阶级完成工作,这是一个从外部完全不可见的阶级。非常有用,你不能在外部类范围内声明一个私有类,你能做的最好的就是内部的。

接下来是它在外部类的继承中没有任何作用。从外部派生的类根本看不到基类内部的嵌套类。这是意图,将其声明为私有是首先嵌套它的原因。

平底船:如果您需要派生类中的该类,只需将其声明为内部或公共。

于 2010-07-01T21:42:42.860 回答
2

嵌套类型不是这样工作的。您不能“覆盖”类型。

目前尚不清楚您要在这里实现什么,但我认为它不会奏效。

于 2010-07-01T21:00:08.050 回答
1

您可以使用 xUnit.NET 和 SubSpec 完成那种丰富、冗长、BDD 风格的测试重述。如今,SubSpec 已包含在 xUnit.NET extras 下载中。您可以在以下文章中阅读有关 SubSpec 和 BDD 测试的更多信息:

http://haacked.com/archive/2008/08/24/introducing-subspec.aspx

于 2010-07-04T01:53:32.583 回答
0

使用配置文件怎么样?例如

   [TestClass]
   public class WhenFoo
   {
      [TestMethod]
      public void TestFoo()
      {
         string str = ConfigurationManager.AppSettings["WhenFooTestFooString"];
      }
   }
于 2010-07-01T21:41:44.597 回答