2013-10-23 16 views
5

Próbuję rozszerzyć .NET TestClass. Odkryłem, że muszę rozszerzyć następujące abstrakcyjne klasy: TestClassExtensionAttribute i TestExtensionExecution. TestExtensionExecution również wymaga mnie do wdrożenia ITestMethodInvoker. Zrobiłem następujące rzeczy, ale kiedy uruchomię metodę testową, żaden z moich punktów przerwania nie jest trafiony (ani w teście, ani w rozszerzeniach), co oznacza, że ​​klasa testowa nigdy nie dostaje się do mojego rozszerzenia i oczywiście kończy się niepowodzeniem we wcześniejszym punkcie. Czy ktoś może wskazać mi, czego mi brakuje, lub na działającym przykładzie, jak przedłużyć ?Jak przedłużyć .NET TestClass

Rozszerzenie:

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(); 
    } 
} 

Test:

[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

Czy brałeś pod uwagę czwartą kwestię, o której mowa [tutaj] (http://www.digitaltapestry.net/blog/extending-mstest)? – BartoszKP

+2

Nie widziałem tego artykułu do tej pory. Przyjrzę się temu i być może dostarczy mi rozwiązania. Jeśli ją znajdę, opublikuję ją jako odpowiedź. Wielkie dzięki! –

+0

To może wyglądać głupio, ale czy nie jest to spowodowane brakiem "public" przed deklaracją klasy rozszerzenia? !!! – Bedouin

Odpowiedz

3

Ten artykuł MSDN opisuje jak wdrożyć TestClassExtensionAttribute: Extending the Visual Studio unit test type

pytanie dotyczyło: Is defining TestMethod's in test base classes not supported by MsTest?

W zależności od tego, czego tyring do akompaniowania lish można użyć standardowej klasy abstrakcyjnej oznaczonej [TestClass]. TestClassAttribute będzie dziedziczony według typów pochodnych, jednak typy pochodne również muszą być oznaczone jako [TestClass] do użytku z [TestInitialize] i [TestCleanup].

Zobacz Using a base class for your unit testing classes.

Powiązane problemy