2014-02-19 19 views
12

Ich benutze Nunit, um einige Tests für einige Klassen durchzuführen.Nunit-Basisklasse mit allgemeinen Tests

Es gibt einige Operationen, die für alle Testklassen gemeinsam sind, aber unterschiedliche Parameter erfordern.

Also habe ich die Tests in einer Basisklasse und virtuellen Methoden in der Basisklasse hinzugefügt, um die Parameter bereitzustellen.

In den abgeleiteten Testklassen habe ich die virtuellen Methoden überschrieben, um spezifische Parameter für die Tests in der Basisklasse bereitzustellen.

Jetzt ist mein Problem, dass ich möchte, dass die Tests in der Basisklasse nur von den abgeleiteten Klassen ausgeführt werden. Ich verwende derzeit das ignore-Attribut für die Basisklasse, um die Tests zu ignorieren, aber dies verursacht einige Warnungen, wenn die Tests ausgeführt werden, und es gibt eine Richtlinie, die es mir nicht erlaubt, die Änderungen an svn zu senden, wenn eine Anzahl von ignorierten Tests vorhanden sind.

Also wie kann ich die Tests von der Basisklasse in den abgeleiteten Klassen nur ohne das Ignorieren Attribut für die Basisklasse ausführen.

Antwort

16

Sie sollten in der Lage sein, Ihre Basisklasse als abstrakt zu markieren, dies wird verhindern, dass nunit die Tests in dieser Klasse ausführt - was bedeutet, dass Sie das Attribut ignore nicht mehr benötigen.

namespace MyTests 
{ 
    [TestFixture] 
    public abstract class BaseTestClass 
    { 
     [Test] 
     public void CommonTest() 
     { 

     } 
    } 

    [TestFixture] 
    public class TestClass1 : BaseTestClass 
    { 
     [Test] 
     public void OtherTest1() 
     { 

     } 
    } 

    [TestFixture] 
    public class TestClass2 : BaseTestClass 
    { 
     [Test] 
     public void OtherTest2() 
     { 

     } 
    } 
} 
+0

Unglaublich, es scheint alles so einfach. Wie konnte ich es verpasst haben? Wenn es eine abstrakte Klasse ist, hat Nunit keine Möglichkeit, es direkt zu instantiieren und die Tests auszuführen. – Alecu

Verwandte Themen