die folgende Klasse Stellen Sie sich vor:Wie testet man eine Methode mit lokaler Instanz?
class ClassToBeTested{
private IClassA a;
private IClassB b;
public ClassToBeTested(IclassA a, IClassB b)
{
this.a = a;
this.b = b;
}
public void MethodToBeTested()
{
//...
var c = new ClassC(a, b);
c.doSomeThing();
//...
}
}
Und ich möchte für MethodToBeTested
einige Unit-Tests zu tun. Aber ich kann keinen Weg zum moq ClassC
Objekt finden, ohne Abhängigkeitsinjektion durchzuführen. Ich möchte die Methodensignatur nicht ändern und ClassC
als Parameter übergeben.
Gibt es einen Weg zur Unit-Test diese Methode?
Sie könnten eine virtuelle Methode erstellen, die einen 'ClassC' zurückgibt, und das wäre mockbar. Siehe [Testing the Un-Testable] (https://contrivedexample.com/2016/11/26/testing-the-un-testable/) – Crowcoder
Sie können eine Property-Injection durchführen und eine Eigenschaft vom Typ 'ClassC' in yout' erstellen ClassToBeTested' –
Verwenden Sie Abhängigkeitsinjektion, aber wenn Sie dies nicht tun möchten und Sie Zugriff auf VS Enterprise haben, können Sie Fälschungen und gefälschte ClassC und ihre Mitglieder verwenden. Dies ist praktisch, wenn Sie keine Versionskontrolle über einen Typ haben, der gerade verwendet wird. In Ihrem Fall würde ich jedoch DI empfehlen. Wenn Sie testen, und es ist nicht einfach wegen der eng gekoppelten Klassen, dann müssen Sie umgestalten, (der Test sagt Ihnen, dass Ihr Design ändern muss) – Igor