我想創建一個測試類,它使用內部類組織它的測試方法。我想這個類是抽象的,可以設置一個靜態屬性,這樣可以注入這個屬性。下面是我在談論的一個例子:如何使用抽象基類繼承內部類?
[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的測試視圖中時。
再次感謝。
我不知道如何做到這一點在VS 2010中,但它可能有助於知道,NUnit的+ ReSharper的做到這一點沒有任何問題: http://code.google.com/p/wipflash/source/browse/Examples/ExampleUtils/AutomationElementWrapperExamples.cs – Lunivore 2010-07-01 21:00:08
這看起來很有希望。你可以進一步瞭解我將如何使用它來解決我的問題嗎? 謝謝。 – LandonSchropp 2010-07-04 01:59:56