2016-08-01 36 views
0

Im Testfall für den Dienst kann die Abhängigkeit der Dao-Klasse und JdbcTemplate nicht aufgelöst werden.JdbcTemplate kann beim Testen des Spring-Boot-Dienstes nicht simuliert werden

public class TestPromotionUsingJunit { 

    @InjectMocks 
    private ItemService itemService; 

    @Mock 
    private ItemDAOImpl itemDAOImpl; 
    @Mock 
    private JdbcTemplate jdbcTemplate; 

    @Before 
    public void setupMock() { 
     MockitoAnnotations.initMocks(this); 

     itemService = new ItemService(); 

    } 

    @Test 
    public void testFindMax() { 
     Product pro1 = new Product(); 
     pro1.setPluCode("4900692627408"); 
     pro1.setCategoryNo("2"); 
     pro1.setCategoryName("Women"); 
     pro1.setProductName("T-Shirt10163"); 
     pro1.setColor("CY"); 
     pro1.setSize("32"); 
     BigDecimal b1 = new BigDecimal(94.00); 
     BigDecimal b2 = new BigDecimal(8); 
     pro1.setPrice(b1); 
     pro1.setTax(b2); 
     Product pro2 = new Product(); 
     pro2.setPluCode("4900692627408"); 

     assertEquals(pro1.getPrice(), itemService.getItem(pro1)); 

    } 

} 

Hier ItemService sollte Produktobjekt zurückgeben, aber es gibt null zurück. Aufgrund intern nicht in der Lage, Abhängigkeit zu lösen.

Antwort

0

@InjectMocks schafft eine Mock-Instanz itemService, aber dann

itemService = new ItemService(); 

schafft eine echte Instanz und die Mock wegwirft. In setupMock(), nach itemService aufgebaut ist, versuchen Sie das Äquivalent von dieser Zugabe:

itemService.setItemDao(itemDAOImpl); 

So haben Sie eine echte ItemService haben, die ein Mock DAO verwendet.

dann in testFindMax() konfigurieren Sie die DAO pro1, so etwas zurück:

when(itemDAOImpl.getItem(...)).thenReturn(pro1);