Die Abhängigkeit selbst ist kein erwartetes Verhalten, aber die Aktionen, die aufgrund der Abhängigkeit aufgerufen werden, sind es sehr wohl. Sie sollten die Dinge testen, die Sie (der Aufrufer) kennen, und vermeiden, die Dinge zu testen, für die Sie intime Kenntnisse über das Innenleben des SUT haben müssen.
Erweitern Sie Ihr Beispiel ein wenig und stellen Sie sich vor, dass unser LinkStorageInterface die folgende Definition hat (Pseudo-Code):
Interface LinkStorageInterface
void WriteListToPersistentMedium(LinkList list)
End Interface
Da Sie (der Aufrufer) die konkrete Implementierung für diese Schnittstelle bereitstellen, ist es durchaus sinnvoll, dass Sie prüfen, dass WriteListToPersistentMedium()
wird aufgerufen, wenn Sie die Save()
Methode auf Ihrer LinkList
.
Ein Test könnte wie folgt aussehen, wiederum unter Verwendung von Pseudocode:
void ShouldSaveLinkListToPersistentMedium()
define da = new MockLinkListStorage()
define list = new LinkList(da)
list.Save()
Assert.Method(da.WriteListToPersistentMedium).WasCalledWith(list)
end method
Sie haben das erwartete Verhalten getestet, ohne implementierungsspezifische Details Ihres SUT oder Ihres Mocks zu testen. Was Sie (meistens) nicht testen wollen, sind Dinge wie:
- Reihenfolge, in der die Methoden aufgerufen wurden
- Eine Methode oder eine Eigenschaft öffentlich machen, nur damit man sie überprüfen kann
- Alles, was nicht direkt mit dem erwarteten Verhalten zu tun hat, das Sie testen
Auch hier ist eine Abhängigkeit etwas, das Sie als Verbraucher der Klasse zur Verfügung stellen, so dass Sie erwarten, dass es verwendet wird. Andernfalls ist es sinnlos, diese Abhängigkeit überhaupt zu haben.