2017-02-14 6 views
0

Ich war an einem Projekt arbeiten und das folgende Problem konfrontiertIntegrationstest best practice

ich eine Methode in der Klasse erstellt einige Benutzer zu finden und Logik anwenden, wirft es eine Ausnahme, wenn etwas Unerwartetes anderes Objekt Benutzer zurückgegeben wird entweder mit ID null oder mit einem Wert

Ich schrieb Unit Test für alle Testfälle, jetzt in callee habe ich vergessen, Bedingung für Null-ID hinzuzufügen.

Was ist die beste Vorgehensweise, um diese Art von Fehler zu behandeln. Soll ich Integrationstests mit allen Testfällen schreiben Oder sollte der Integrationstest nur einen glücklichen Weg haben?

Zweitens, ist es im Integrationstest gut, eingebettete Datenbank anstelle von tatsächlichen db zu verwenden? Ich dachte, eingebettete Datenbank für Integrationstest zu verwenden, aber wie kann ich die Abfragen prüfen, die anbieterspezifisch sind, Beispiel rownum in Oracle und Begrenzung in mysql. In meinem aktuellen env verwenden wir Oracle und eingebettete Datenbank kann ich h2 verwenden. Ich verwende Ebene jdbc

Dank

+0

Als allgemeine Richtlinie sollte jeder Test (Einheit oder Integration) alle Rückgabetypen und deren Wertebereich testen. Ein Integrationstest würde alle Aspekte des Produktionscodes nachahmen. Es könnte die tatsächlichen Objekte durch Mock-Objekte ersetzen. Siehe hierzu [link] (http://stackoverflow.com/questions/520064/what-is-unit-test-integration-test-smoke-test-regression-test) für Details. Nicht klar, was du im letzten Absatz ab dem 2. Satz meinst, vielleicht klar? – NameRakes

+0

Danke namakers .. ich habe den zweiten Teil der Frage bearbeitet –

Antwort

0

Dies ist, was ich für herstellerspezifische Situationen tun würde - da rownum in Oracle und limit in MySQL sowohl Limit der Anzahl der zurückgegebenen Zeilen, würde ich eine Abstraktion auf meiner Seite erstellen, sagen, myLimit. Abhängig von der Auswahl der Lieferanten-DB wird entweder rownum oder limit zugeordnet.

Sobald Sie die oben genannten und alle anderen notwendigen Abstraktionen haben, die alle Aspekte Ihrer App abdecken, können Sie damit beginnen, die Integrationstests zu entwerfen. Meine empfohlene Einstellung ist: (i) tatsächliche DB-Verbindung, (ii) eingebettete DB und (iii) Schein-DB für alle Anbieter. Die DB selbst muss nicht zu groß sein.

Basierend auf QA-Metriken, wenn Sie der Meinung sind, dass die DB-Verbindungen gründlich durch andere Tests getestet werden, dann würde ich mit nur Embedded oder Mock DB in Integrationstests gehen.

Wie Sie sehen können, hängt die Antwort davon ab, wie gut der Rest des Systems getestet wird! Viel Glück.

0

Informationen zu Einheiten- und Integrationstests.

Lassen Sie uns klären, was ist der Unterschied zwischen diesen Arten von Tests.

Unit-Tests sollte Einheit werden abdeckt, was bedeutet, dass wir ganz kleines Stück Code bedecken. Somit decken Unit-Tests normalerweise sehr spezifische Fälle ab und normalerweise gibt es viele Unit-Tests, da das Programm für eine kleine Methode mehrere Richtungen haben kann und alle von ihnen abgedeckt sein sollten. Alle Dinge, die stören Unit-Test, wie zum Beispiel einige Methoden, die externe Parteien aufrufen und nicht wirklich auf die Geschäftslogik der Methode bezogen müssen verspottet werden.

In Integrationstest Stattdessen ist es nicht ratsam, etwas zu verspotten, weil Sie das gesamte Rohr im Grunde testen möchten, was bedeutet, dass Ihr Test durch verschiedene Module (Klassen) gehen sollte und nichts verspotten. Diese Art von Tests sind normalerweise ziemlich riesig, also würde ich nicht einige kleine Überprüfungsprüfungen innerhalb Integration Tests raten, weil es aus meiner Sicht nicht wert ist, das zu tun.

Wenn ich Ihren Fall richtig aus meiner Sicht verstehe, sollte Ihre Methode auf Null und nicht auf den Aufrufer überprüfen. Es basiert auf der Tatsache, dass Sie nie wissen, wer Ihre Methode aufrufen wird. Ihre Methode sollte alle unterschiedlichen Werte in den Eingabeparametern erwarten, die zulässig sind.