Ein reales Projekt hat mir gezeigt, dass es nicht möglich ist, Komponententests zu schreiben, und dann ist die Integration und sogar die entgegengesetzte Richtung falsch :-) Also schreibe ich normalerweise Komponententests zusammen mit den Integrationstests.
Warum? Lassen Sie mich schreiben, wie ich beide Arten von Tests sehe:
Komponententests - Neben Wikipedia und allen bekannten Informationen helfen Komponententests dabei, Ihr Design einzugrenzen, Ihr Modell und Ihre Beziehungen zu verbessern. Der Ablauf ist einfach: Sobald Sie mit der Eingabe eines neuen Projekts / einer neuen Komponente beginnen, erstellen Sie die meiste Zeit eine Art PoC . Wenn Sie fertig sind, haben Sie immer lange Methoden, lange Klassen, nicht kohärente Methoden und Klassen usw.
Unit-Tests helfen Ihnen dabei, diese Probleme zu beseitigen, da Sie echte Unit-Tests mit den oben beschriebenen Mock-Klassen (ohne Abhängigkeit von anderen Komponenten) nicht testen können. Ein grundlegendes Zeichen für nicht testbaren Code ist ein großer verspottender Teil der Tests, da Sie gezwungen sind, viele Abhängigkeiten (oder Situationen) zu verspotten.
Integrationstests - korrekte und funktionierende Tests sagen Ihnen, dass Ihre neue Komponente (oder Komponenten) zusammen oder mit anderen Komponenten arbeiten - dies ist die übliche Definition. Ich habe festgestellt, dass Integrationstests Ihnen hauptsächlich dabei helfen, den Ablauf für die Verwendung Ihrer Komponente auf der Verbraucherseite zu definieren .
Dies ist sehr wichtig, da Ihnen manchmal gesagt wird, dass Ihre API von außen keinen Sinn ergibt.
Was passiert, wenn ich später Unit-Tests und Integrationstests geschrieben habe?
Ich habe nette Klassen, klares Design, gute Konstruktoren, kurze und kohärente Methoden, IoC-fähig usw. Nachdem ich meine Klasse / API einem Verbraucher gegeben habe, z. B. einem Entwickler aus der Integration oder einem GUI-Team, konnte er meine API nicht verwenden, da dies unlogisch erscheint , seltsam. Er war nur verwirrt. Also habe ich API nach seiner Ansicht repariert, aber es mussten auch viele Tests neu geschrieben werden, da ich dazu gedrängt wurde, die Methoden und manchmal sogar den Ablauf für die Verwendung der API zu ändern.
Was passiert, wenn ich später Integrationstests und Unit-Tests geschrieben habe?
Ich habe exakten Fluss, gute Bedienbarkeit. Was ich auch habe, sind große Klassen, nicht kohärenter Code, keine Protokollierung, lange Methoden. Spaghetti-Code
Was ist mein Rat?
Ich habe folgenden Ablauf gelernt:
- Entwickeln Sie das Grundgerüst Ihres Codes
- Schreiben Sie Integrationstests, aus denen hervorgeht, ob dies aus Verbrauchersicht sinnvoll ist. Grundlegender Anwendungsfall ist fürs Erste ausreichend. Der Test funktioniert offensichtlich nicht.
- Schreiben Sie Code zusammen mit Unit-Tests für jede Klasse.
- Schreiben Sie den Rest / das Fehlen von Integrationstests. Es wäre besser, diesen Test innerhalb von # 3 zu implementieren, wie Sie Ihren Code verbessern.
Beachten Sie, dass ich eine kleine Präsentation über Unit- / Integrationstests gemacht habe (siehe Folie 21, in der das Skelett beschrieben wird).