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

Unable to mock JdbcTemplate in testing spring boot service

在服务的测试用例中,我无法解析 dao class 和 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 应该 return 产品对象,但它 return 为空。由于内部无法解决依赖。

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

itemService = new ItemService();

创建一个真实的实例并丢弃模拟。在 setupMock() 中,在构造 itemService 之后,尝试添加以下等价物:

itemService.setItemDao(itemDAOImpl);

因此您将拥有一个使用模拟 DAO 的真实 ItemService。

然后在 testFindMax() 中将 DAO 配置为 return pro1,如下所示:

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