无法在测试Spring启动服务时模拟JdbcTemplate

时间:2016-08-01 12:24:46

标签: java spring spring-boot mockito junit4

在服务测试用例中,我无法解析dao类和JdbcTemplate的依赖关系。

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));

    }

}

这里ItemService应该返回产品对象,但它返回null。由于内部无法解决依赖性。

1 个答案:

答案 0 :(得分:0)

@InjectMocks创建itemService的模拟实例,但随后

itemService = new ItemService();

创建一个真实的实例并抛出模拟。在setupMock()中,在构造itemService之后,尝试添加等效的:

itemService.setItemDao(itemDAOImpl);

所以你将拥有一个使用模拟DAO的真实ItemService。

然后在testFindMax()中配置DAO以返回pro1,如下所示:

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