2013-10-23 47 views
5

我試圖擴展.NET TestClass。我發現我需要擴展以下抽象類:TestClassExtensionAttributeTestExtensionExecutionTestExtensionExecution也要求我執行ITestMethodInvoker。我做了以下,但是當我運行測試方法時,我的斷點都沒有被擊中(無論是在測試還是擴展中),這意味着測試類永遠不會到達我的擴展,並且顯然在更早的時候失敗。 有人可以指點我缺少什麼,或者如何擴展TestClass如何擴展.NET TestClass

擴展:

class CoreTestClass : TestClassExtensionAttribute 
{ 
    public override Uri ExtensionId 
    { 
     get { throw new NotImplementedException(); } 
    } 

    public override TestExtensionExecution GetExecution() 
    { 
     return new TestCore(); 
    } 
} 

class TestCore: TestExtensionExecution 
{ 
    public override ITestMethodInvoker CreateTestMethodInvoker(TestMethodInvokerContext context) 
    { 
     return new AnalysisTestMethodInvoker(); 
    } 

    public override void Dispose() 
    { 

    } 

    public override void Initialize(TestExecution execution) 
    { 
     execution.OnTestStopping += execution_OnTestStopping; 
    } 

    void execution_OnTestStopping(object sender, OnTestStoppingEventArgs e) 
    { 
     throw new NotImplementedException(); 
    } 
} 

class AnalysisTestMethodInvoker : ITestMethodInvoker 
{ 
    public TestMethodInvokerResult Invoke(params object[] parameters) 
    { 
     throw new NotImplementedException(); 
    } 
} 

測試:

[CoreTestClass] 
public class HomeControllerTest 
{ 
    [TestMethod] 
    public void Index() 
    { 
     // Arrange 
     HomeController controller = new HomeController(); 

     // Act 
     ViewResult result = controller.Index() as ViewResult; 

     // Assert 
     Assert.AreEqual("Modify this template to jump-start your ASP.NET MVC application.", result.ViewBag.Message); 
    } 
} 
+2

你有沒有考慮過提到的第4期[這裏](http://www.digitaltapestry.net/blog/extending-mstest)? – BartoszKP

+2

我目前還沒有看過這篇文章。我會看看它,也許它會爲我提供一個解決方案。如果我找到一個,我會將其作爲答案發布。非常感謝! –

+0

它可能看起來很愚蠢,但是這不是由於在擴展類聲明之前缺少「公共」嗎? – Bedouin

回答

3

這MSDN文章介紹瞭如何實現TestClassExtensionAttributeExtending the Visual Studio unit test type

相關問題:Is defining TestMethod's in test base classes not supported by MsTest?

根據您tyring什麼完成你可以使用標有[TestClass]的標準抽象類。 TestClassAttribute將由派生類型繼承,但派生類型還必須標記爲[TestClass],以便與[TestInitialize][TestCleanup]一起使用。

請參閱Using a base class for your unit testing classes