Wenn ich bereits einen Integrationstest für mein Programm habe und alle bestanden haben, habe ich das gute Gefühl, dass es funktionieren wird. Was sind dann die Gründe, Unit-Tests zu schreiben / hinzuzufügen? Da ich ohnehin schon Integrationstests schreiben muss, schreibe ich nur Unit-Tests für Teile, die nicht durch Integrationstests abgedeckt sind.
Was ich weiß, sind die Vorteile des Unit-Tests gegenüber dem Integrationstest
- Klein und daher schnell zu laufen (aber das Hinzufügen eines neuen Geräts zum Testen von etwas wird bereits durch den Integrationstest getestet, was bedeutet, dass mein gesamter Testanzug größer und länger läuft)
- Das Auffinden von Fehlern ist einfacher, da nur eine Sache getestet wird (aber ich kann mit dem Schreiben eines Komponententests beginnen, um jedes einzelne Teil zu überprüfen, wenn mein Integrationstest fehlgeschlagen ist).
- Finden Sie Fehler, die möglicherweise nicht im Integrationstest gefunden wurden. zB Fehler maskieren / ausgleichen. (Aber wenn meine Integrationstests alle bestanden haben, was bedeutet, dass mein Programm funktioniert, gibt es sogar einen versteckten Fehler. Diese Fehler zu finden / zu beheben hat keine hohe Priorität, es sei denn, sie brechen zukünftige Integrationstests oder verursachen Leistungsprobleme.)
Und wir wollen immer weniger Code schreiben, aber beim Schreiben von Unit-Tests wird viel mehr Code benötigt (hauptsächlich Setup-Mock-Objekte). Der Unterschied zwischen einigen meiner Komponententests und Integrationstests besteht darin, dass ich bei Komponententests Scheinobjekte und bei Integrationstests echte Objekte verwende. Welche haben viele Duplikate und ich mag keinen duplizierten Code, auch in Tests, weil dies Overhead hinzufügen, um das Verhalten des Codes zu ändern (Refactor-Tool kann nicht alle Arbeit die ganze Zeit).