2016-04-06 8 views
1

Sollte ich mein System unter Testcode umgestalten, um ein Objektdiagramm anstelle jeder einzelnen Abhängigkeit zu akzeptieren?Objektgraph für bessere Testbarkeit

Da ich meine Lösung nicht mit Komponententests gestartet habe, überarbeite ich die Testbarkeit.

ich alle meine Abhängigkeiten durch den Konstruktor Injektion:

var myApp = new MyClass(DependencyOne, DependencyTwo, ...DependencyTen) 

Im Konstruktor ich meine Soldaten auf diese Abhängigkeiten bin Initialisierung:

MyClass 
{ 
    MyClass(IDependencyOne, IDependencyTwo, ...IDependencyTen) 
    { 
    dependencyOne = IDependencyOne; 
    dependencyTwo = dependencyTwo ; 
    ... 
    dependencyTen = IDependencyTen; 

    } 
} 

Für meine Unit-Tests, kann ich jetzt Mock jede Abhängigkeit:

var mockDep1 = new Mock<IDependencyOne>(); 
var mockDep2 = new Mock<IDependencyTwo>(); 
... 
var sut = new MyClass(mockDep1.Object, mockDep2.Object..) 

Wh Ist das der beste Standard für die Strukturierung von Code, der viele Abhängigkeiten akzeptiert, um testbar zu sein?

+0

Verwenden Sie IoC? Andernfalls können Sie ein testbares Muster verwenden - http://bradwilson.typepad.com/blog/2011/06/the-testable-object-pattern.html – Valentin

+0

danke für den Link. Ich mag das sehr; Was tun Sie jedoch, wenn Sie eine der Abhängigkeiten vortäuschen müssen? Es bricht das Muster –

+0

Werfen Sie auch einen Blick auf die AutoMocking-Systeme wie folgt http://docs.structuremap.net/AutoMocker.htm – Valentin

Antwort

1

Wie ich betrachte, gibt es mehrere Möglichkeiten, Abhängigkeiten in Tests aufzulösen.

schlage ich automocking containers zum Beispiel verwenden structure map Es ist sehr sauber und es ist leicht Abhängigkeiten hinzuzufügen, ohne Testklassen aktualisieren zu müssen.

Sie können auch die Verwendung von IoC vermeiden und alle Abhängigkeiten manuell auflösen oder testable pattern verwenden.

+0

Was ist, wenn Sie die Ansicht oder den Service verspotten möchten? https://drive.google.com/file/d/0ByqKtGmtuLzZVkppajI1U004aWM/view?usp=drivesdk –

+0

Entschuldigung, ich habe keinen Zugang zu dieser Site. Wenn Sie teilen möchten, setzen Sie es in die Frage. – Valentin

Verwandte Themen