Wir haben bei unserem letzten Integrationstest viel Zeit mit einem Fehler verschwendet, der meiner Meinung nach beim Testen von Einheiten hätte gefunden werden müssen. Das Problem war, dass sich eine Schnittstelle / ein Dienst, die wir anriefen, anders verhielt als erwartet, und der Unit-Test dieses Problem nicht fand, weil wir diese Schnittstelle für den Unit-Test verspotteten und unser Mock natürlich auf unserer falschen Interpretation der Schnittstelle beruhte tun. Jetzt könnte ich ein bisschen wütend auf unseren lieben Mitarbeiter sein, der die Schnittstelle bereitgestellt hat, weil ihre Beschreibung / Spezifikation (ein knapper JavaDoc-Kommentar) nicht eindeutig war und zu unserem Missverständnis beitrug. Andererseits dachte ich, dass das Problem hätte vermieden werden können, wenn dieselben Mitarbeiter eine Scheinimplementierung ihrer Schnittstelle bereitgestellt hätten, die wir in unseren Unit-Tests aufrufen könnten.
Was ist nun die beste Vorgehensweise bei der Organisation der Erstellung von Scheinobjekten unter Teams, die gemeinsam genutzte Schnittstellen bereitstellen und verwenden? Was sind deine Erfahrungen?
quelle
Antworten:
Im Idealfall ja.
Jeder, der Code schreibt, den andere verwenden, ist nicht verpflichtet, den Code zu ergänzen. Wenn Sie jedoch möchten, dass Benutzer Ihren Code verwenden (und jeder sollte immer mit dieser Mentalität schreiben), ist eine umfangreiche relevante Dokumentation - die Beispiele enthalten kann - äußerst nützlich.
Ich glaube nicht, dass ich jemals Dokumentation gelesen habe und gedacht habe: "Das ist dumm; es gibt viel zu viel Dokumentation." Menschen sind von Natur aus begabt, das zu überspringen, was sie für unnötig halten. Wir können jedoch nicht einfach die Dokumentation oder Konzepte lesen und interpolieren, die nicht erklärt wurden. Man kann also davon ausgehen, dass es nicht zu viele gute Dokumentationen gibt. Es sollte auch davon ausgegangen werden, dass die Person es als naives Kind liest (dh es so einfach wie möglich macht).
Beispiele zum Instanziieren und Verwenden einer Klasse sind immer hilfreich. Wenn der Code jedoch zu stark von der Dokumentation abhängt, um verstanden zu werden, ist dies ein weiteres (separates) Problem.
Diese Antwort sollte nicht als Feuerkraft angesehen werden, die es rechtfertigt, Ihren Kollegen anzuschreien. Es ist lediglich eine Richtlinie dessen, was ich für nützlich halte und was getan werden sollte. Während dies in Ihrer Situation völlig nutzlos ist (obwohl ich der Meinung bin, dass Ihre Frage im Grunde genommen ein Scherz ist), ist das nächstbeste, was Sie tun können, mit gutem Beispiel voranzugehen und zu hoffen, dass Ihr Kollege vorbeikommt.
quelle
Nein , aber der Anbieter sollte auch den Quellcode für seine Unittests bereitstellen. Wenn Sie diese Unittests lesen, erhalten Sie einen guten Eindruck davon, wie die Bibliothek verwendet werden sollte. Vielleicht können Sie den Provider-Tests Unittests hinzufügen, um anzugeben, was Sie vom Provider erwarten.
Es gibt viele Mocking-Tools / Frameworks, die einen Fake / Stub / Mock implementieren können.
Wenn der Anbieter nach einer Scheinimplementierung gefragt wird, besteht kein gutes Kosten-Nutzen-Verhältnis, da er nicht wissen kann, welcher Teil der gefälschten Implementierung nahezu identisch mit der tatsächlichen Implementierung sein muss und welcher Teil nur eine Fassade ist.
Eine andere Möglichkeit besteht darin, dass der Anbieter Codeverträge verwendet , um sicherzustellen, dass die Bibliothek auf die angegebene Weise verwendet wird.
quelle
the mock should check all the preconditions
: Warum muss der Mock prüfen, ob die echte Bibliothek diese Prüfung durchführt? Wenn Sie einen Integrationstest mit der realen Bibliothek haben, sollten diese Tests Sie zum Problem führen.