簡體   English   中英

如何使用抽象基類繼承內部類?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM