我需要在Spring的ProductManager类中测试以下方法。 productService一个bean,并注入到ProductManager类中。我尝试使用Mockito编写Junit测试,但是它一直调用真正的productService.getProductIdList(email)方法而不是模拟方法。 ProductService也有一个@PostConstruct。谁能启发我测试代码出了什么问题?
@Named(ProductManager.NAME)
public class ProductManager {
@Resource(name = ProductService.NAME)
private ProductService productService;
public static final String NAME = "productManager";
public Set<Product> getProducts(String email) {
Set<Integer> productList = productService.getProductIdList(email);
Iterator<Integer> itr = productList.iterator();
Set<Product> products = new HashSet<Product>();
Product p = null;
while (itr.hasNext()) {
p = getProduct(itr.next());
if (p != null) {
products.add(p);
}
}
return products;
}
public Product getProduct(Integer ProductId) {
Product p = productService.getProduct(productId);
return p;
}
}
到目前为止,我已经遵循了Junit测试代码。
@Test
public void getProductByEmail(){
String email = "[email protected]";
ProductService mockProductService = mock(ProductServiceImpl.class);
Integer productId1 = 10000;
Integer productId2 = 10002;
Product p1 = mock(Product.class);
Product p2 = mock(Product.class);
when(p1.getProductId()).thenReturn(productId1);
when(p2.getProductId()).thenReturn(productId2);
Set<Integer> productIdSet = (Set<Integer>)mock(Set.class);
productIdSet.add(productId1);
productIdSet.add(productId2);
Iterator<Integer> productIdIterator = (Iterator<Integer>)mock(Iterator.class);
when(productIdSet.iterator()).thenReturn(productIdIterator);
when(mockProductService.getProductIdList(email)).thenReturn(productIdSet);
when(productIdIterator.hasNext()).thenReturn(true, true, false);
when(productIdIterator.next()).thenReturn(productId1).thenReturn(productId2);
when(productManager.getProduct(productId1)).thenReturn(p1);
when(productManager.getProduct(productId2)).thenReturn(p2);
Set<Product> products = productManager.getProducts(email);
assertEquals(2, products.size());
}
最佳答案
我看不到将模拟的ProductService设置到ProductManager对象的任何位置。
您已经创建了一组复杂的相关对象,但是没有要求ProductManager使用它。
关于java - 具有Spring Bean依赖项的Junit/Mockito单元,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22823958/