2016-10-07 4 views
0

Ich möchte eine Testmethode für eine Service-Methode schreiben. In dieser Service-Methode rufen wir eine Abfrage auf, die die Daten aus der Datenbank holt, und dieser Wert wird in der Funktion verwendet, um etwas zu verarbeiten. Ich möchte nur diesen DB-Aufruf stubben. hier ist meine FunktionMock eine Aussage mit MockIto

public arraylist retrieveSomthing(JdbcTemplate){ 

//some processing is happening 

List<Map<String,Object>> result = JdbcTemplate.queryForList("QueryName"); 

//some processing is happening for the result return from the query. 


} 

Ich möchte den Test für die obige Funktion schreiben, aber ich will nur die Jdbc.queryforList Anweisung Stummel.

Bitte helfen Sie mir, wie Sie die Aussage stub gehen.

Vielen Dank im Voraus.

+0

Mögliche Duplikate von [Mocking statische Methoden mit Mockito] (http://stackoverflow.com/questions/21105403/mocking-static-methods-with-mockito) – SpaceTrucker

Antwort

0
@Test 
public void testRetrieveSomthing() { 
    JdbcTemplate jdbcTemplate = mock(JdbcTemplate.class); 
    List <..> results = ///something you would do dummy return 
    when(jdbcTemplate.queryForList(anyString())).thenReturn(results); 
    List <..> alist = instance.retrieveSomthing(jdbcTemplate); 
    assertEquals(alist, expectedList); 

} 
+0

Wieder versuchte ich mit Matchern wie anyString() und anyCollections() aber immer noch bekomme ich den gleichen Fehler. –

0

Es ist einfach, das jdbctemplate Objekt wie unten verspotten

1):

@Mock private JdbcTemplate jdbcTemplate; 

2) Da jdbcTemplate.queryForList ("Abfragename") Liste zurück, stellen Sie sicher, dass Sie ein List-Objekt erstellt und diesen Wert zurückkehrt, während (wie unten) stubbing

List<Example> result = new ArrayList(); 
    result.add("dummy values"); 
    result.add("dummy values"); 

dann

//import static org.mockito.Matchers.anyString; 
    Mockito.when(jdbcTemplate.queryForList(anyString()).thenReturn(result); 

PS: Punkte zu erinnern, während spöttisch und Anstoßen sind,

1), während mit dem Listenobjekt erstellen neues Objekt handelt und das Rück als Wert der tatsächlichen Testklasse auf stubbing

2) Verwenden Matcher wie AnyString() anstelle von etwas Text verwenden.

Ich hoffe, es ist nützlich.

+0

Danke für den Kommentar. Aber ich habe genau das gemacht, was du erwähnt hast, aber ich bekomme immer null als Ergebnis. hier ist meine Testfunktion –

+0

public void retrieveRestrictedUpcsTestEquals() { ArrayList upcsList = neue ArrayList (); upcsList.add (TestDataConstants.UPC1); Liste > result = new ArrayList >() Zuordnung upc_nbr = new HashMap (); upc_nbr.put ("upc_nbr", 2) result.add (upc_nbr); \t Mockito.when (wmJdbcTemplate.queryForList (FETCH_RSTRCTED_UPC_QRY, upcsList)). ThenReturn (result); ArrayList upcList = daoImpl.retrieveRestrictedUpcs (wmJdbcTemplate); \t \t assertTrue (upcList.size() == 2); –

+0

Ich habe es auch mit den Matchern versucht, aber das gleiche Ergebnis erzielt. nicht sicher Wenn ich etwas falsch mache. Bitte helfen Sie. –

Verwandte Themen