2016-07-26 5 views
0

Ich versuche, diesen Codeblock in einer Methode in meiner Serviceebene Unit-Test. Könnte jemand vorschlagen, was ich (/ sollte) ich hier testen und wie Sie sie testen (vor allem die Einfügung zu db-Teil). Alle Zeiger (/ Beispielcode/doc) werden sehr hilfreich sein.Mocking Db in Java-Unit-Tests

if (element != null) { 
    id = iplDAO.loadGames(element, batchVO.getId()); 
    iplPartyDetailsVO = element.getParty(); 
    if iplPartyDetailsVO != null) { 
    try { 
     iplDAO.insertPartyDetails(iplPartyDetailsVO, id, batchVO.getId()); 
    } catch (Exception e) { 

     logger.logp("className"); 
     String err = "blah"; 
     iplDAO.insertIntoError(err_t); 
    } 
} 
+0

Besitzen Sie den DAO-Code oder ist er proprietär? – Compass

+1

Können Sie teilen, wie das 'iplDAO' erstellt/initialisiert wird? – Mureinik

+0

@Compass Ja wir DAO-Code besitzen - seine erstellt wie folgt: ‚public class IPLDAO erweitert BaseDAO implementiert TTDAO { \t At-Autowired \t privaten ITXXDAO txxDao; \t \t öffentliche int loadGames (..) { \t return id; } \t At-Aufschalten \t public boolean insertPartyDetails (a, b, c) { \t \t return x; \t} } ' Und in der Serviceklasse seine Autowired – user2666282

Antwort

0

Ich glaube, Sie könnten die Tests mit dem spöttischen verwirrend sein, wenn Sie versuchen, Tests für diesen Service-Layer-Code zu schreiben, dann müssen Sie entscheiden, was sind Ihre Erwartungen, zum Beispiel:

  • Laden Sie einige Spiele aus einer Datenquelle
  • Speichern Sie etwas (es ist nicht in Ihrem Code klar, was Sie tatsächlich speichern, aber das Schreiben einiger Komponententests könnte dies offensichtlicher machen). So

wenn diese Ihre Erwartungen für Ihren Code sind dann würden Sie brauchen, um einen Test zu schreiben, die überprüfen können, ob sie erfüllt sind.

Das bedeutet mocking the dependency, die Sie (in Ihrem Fall des iplDAO Objekt), so dass jede Methode Aufruf gibt etwas fordern, die verwendet werden können, Ihre Funktionalität zu testen - in Ihrem Fall dieser beiden Anrufe:

iplDAO.loadGames(element,batchVO.getId()) 

und

iplDAO.insertPartyDetails(iplPartyDetailsVO, id,batchVO.getId()); 

Es gibt viele Java mocking libraries zur Auswahl, und sie sind alle gut dokumentiert, aber this blog post ist ein guter Ausgangspunkt.

+0

Danke - so empfehlen Sie, diese zu dao Anrufe zu testen? Jetzt ist meine Fragen wie kann ich iplDAO.insertPartyDetails (iplPartyDetailsVO, id, batchVO.getId()) testen; ohne einen tatsächlichen Einsatz? (Kann ein DB-Mock helfen? Wenn ja, können Sie mich bitte auf ein Beispiel verweisen) – user2666282

+0

@ user2666282 Wenn Sie ein Mock-iplDAO-Objekt in Ihrer Klasse verwenden (z. B. mit der Mockito-Bibliothek), ersetzen Sie das, was das 'echte' iplDAO-Objekt normalerweise tut (vermutlich das Lesen und Einfügen in die DB). Es wird also keine Interaktion mit der Datenbank geben. Wenn Sie die gesamte Klasse veröffentlichen, wird es einfacher sein, ein Beispiel zu geben. – tchambers