2012-04-07 17 views
1

Ich habe vor Kurzem mit NSpec begonnen und jetzt weiß ich nicht, wie ich das skalieren soll.Wiederverwendung von NSpec-Spezifikationen

Wie können Spezifikationen am besten wiederverwendet werden (it["something"] =() => {};)?

Nehmen wir an, ich habe eine Schnittstelle IMyService und 2 Klassen, die es implementieren: Service1 und Service2.

Jetzt möchte ich Spezifikationen schreiben, die unter IMyservice Ebene gelten, und führen Sie sie für meine 2 Implementierungsklassen.

Vielleicht vermisse ich hier etwas, aber ich kann einen einfachen Weg finden, dies zu tun.

Antwort

2

Sie können eine abstrakte Klasse verwenden, um die Spezifikation wiederzuverwenden. Hier ein Beispiel:

/* 
Output: 

describe Service1 
    it should do this 
    it should also do this 
    specify something unique to service1  
describe Service2 
    it should do this 
    it should also do this 
    specify something unique to service2 
*/ 


abstract class some_shared_spec : nspec 
{ 
    public IMyservice service; 

    void it_should_do_this() 
    { 

    } 

    void it_should_also_do_this() 
    { 

    } 
} 

class describe_Service1 : some_shared_spec 
{ 
    void before_each() 
    { 
     service = new Service1(); 
    } 

    void specify_something_unique_to_service1() 
    { 
    } 
} 

class describe_Service2 : some_shared_spec 
{ 
    void before_each() 
    { 
     service = new Service2(); 
    } 

    void specify_something_unique_to_service2() 
    { 
    } 
} 

+0

Vielen Dank für das Amir. Es ist lange her, seit ich das hier untersucht habe, aber ich hatte den Eindruck, dass Methoden in Basisklassen nicht enthalten sind. Ich werde es wieder versuchen. Vielen Dank! – Pedro

+0

Fühlen Sie sich frei, mich jederzeit auf Twitter oder per E-Mail zu erreichen, wenn Sie ein paar gute Beispiele zu NSpec Tests benötigen, würde ich dies empfehlen: http://stackoverflow.com/questions/10741104/can-anyone-show-me-some -example-of-nspec-to-test-controllers-and-ot – Amir

+0

Dies wurde in einer späteren Version von NSpec hinzugefügt, stellen Sie sicher, dass Sie die neueste Version verwenden. – Amir