2017-11-10 2 views
0

würde Ich mag die Definition von Test eine ihrer Umsetzung wie folgt aufgeteilt:Split-Test Definition und Testimplementierung mit nunit, xunit oder Visual Studio Test

[TestFixture] 
public abstract class ContainerTests 
{ 
    [Test] 
    public abstract void BuildContainer(); 
} 

public class UnityTest : ContainerTests 
{ 
    public override BuildContainer() 
    { 
     // Implementation 
    } 
} 

Ich möchte eine abstrakte haben Definition von Szenarien und deren Umsetzung in unterschiedlicher Art, damit ich sie vergleichen kann. Der TestRunner muss alle Tests von der geerbten Klasse abfangen, auch wenn sie in der Basisklasse definiert sind. Gibt es eine Möglichkeit, dies zu tun?

Mit freundlichen Grüßen, zimmy

+0

können Sie einfach eine Schnittstelle IContainerTests verwenden, um die Implementierung der Tests zu erzwingen –

+0

Danke für Ihre Antwort. Ich habe die wichtige Einschränkung vergessen, dass der TestRunner alle Tests in der geerbten Klasse abfangen muss, wenn die Definition in der Basisklasse liegt. Ich habe versucht, NUnit und dort ist es nicht möglich, [TestFixture] in Schnittstellen zu definieren. – zimmybln

Antwort

1

mit xunit Sie gerne tun können: -

public abstract class ContainerTests 
    { 
     [Fact] 
     public abstract void BuildContainer(); 
    } 

    public class UnityContainer : ContainerTests 
    { 
     public override void BuildContainer() 
     { 
      Assert.Equal(1,2); 
     } 

    } 
+0

Das funktioniert. Vielen Dank. – zimmybln

0

Wenn es möglich wäre, den Code, den Sie in NUnit geben zu schreiben, würde es bedeuten, dass jeder Entwickler von einem abgeleiteten Klasse müsste einen Test mit dem Namen BuildContainer haben. Dieser Test könnte alles testen oder auch nur leer sein. Wenn Sie also Entwickler dazu zwingen wollen, einen Test zu implementieren, der etwas Bestimmtes testet, dann wird dies die Aufgabe nicht erfüllen.

Sie können jedoch den Test in der Basisklasse mithilfe von Aufrufen bestimmter abstrakter Methoden implementieren, die die abgeleitete Klasse implementieren müsste. Im Allgemeinen möchten Sie, dass diese Methoden etwas tun, was Sie in der Basisklasse geltend machen können, anstatt dass sie die erforderlichen Asserts selbst ausführen.

Im Allgemeinen ist die fehlende Möglichkeit, Testmethoden in NUnit zu überschreiben, auf eine Ansicht der Autoren zurückzuführen, dass dies in den meisten Fällen keine so gute Idee ist. Ich würde mich für einen Fall interessieren, der ein Gegenbeispiel ist.

Verwandte Themen