无法在测试 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);
在服务的测试用例中,我无法解析 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);