Java 当方法使用任何参数时,Mockito存根将返回null

Java 当方法使用任何参数时,Mockito存根将返回null,java,junit,mockito,stubbing,Java,Junit,Mockito,Stubbing,我想采用以下方法: ProductArray productsArray; productsArray = dataService.getProducts(ProductFilter pf, Date date1, Date date2, boolean matured); 在我的测试课上,我有以下内容 ProductArray productsArrayTest = getProductsArrayForTest(); Mockito.when(dataServiceMock.getProd

我想采用以下方法:

ProductArray productsArray;
productsArray = dataService.getProducts(ProductFilter pf, Date date1, Date date2, boolean matured);
在我的测试课上,我有以下内容

ProductArray productsArrayTest = getProductsArrayForTest();
Mockito.when(dataServiceMock.getProducts(Mockito.any(ProductFilter.class), Mockito.any(Date.class), Mockito.any(Date.class), Mockito.any(Boolean.class))).thenReturn(productsArrayTest);
但是在本测试中,
productsArray
返回为
null

Mockito给出了以下警告

[MockitoHint] 1. Unused... -> at 
com.company.util.TestProduct.testProductLoad(TestProduct.java:157)
[MockitoHint]  ...args ok? -> at 
com.company.datastore.ProductLoader.processAll(ProductLoaderProcess.java:158)
这可能是什么原因

编辑:

  • 在第一条注释后编辑- 我看到您在定义getProductsArrayTest()时调用了方法getProductsArrayForTest()。检查这是否只是文章中的错误,甚至是代码中的错误。 但是,下面是代码,测试成功了

    public class Product {
     double price;
     public Product() {
    
     }
     public double getPrice() {
      return this.price;
     }
     public void setPrice(double value) {
      this.price=value;
     }
    }
    
    ProductArray.class

    import java.util.ArrayList;
    import java.util.List;
    
    
    public class ProductArray {
     private List<Product> productList;
     public ProductArray() {
      productList=new ArrayList<Product>();
    
     }
     public void add(Product product) {
      this.productList.add(product);
     }
     public List<Product> getProductList(){
      return this.productList;
     }
    }
    

“DataService.getProducts”这是一个静态方法吗?不,它不是一个静态方法。您可以发布getProductsArrayForTest()方法的代码吗?DataService是一个类,但是调用DataService.getProducts()不是静态的?我的帖子中有一个错误,应该是DataService的小写字母d,已经发布了代码。这样编写代码有帮助吗:doReturn(ProductsArray测试)。when(dataServiceMock)。getProducts(Mockito.any(ProductFilter.class),Mockito.any(Date.class),Mockito.any(Date.class),Mockito.any(Boolean.class));我要改变答案,让你看看我的密码你解决了吗?你有什么消息吗@user3809938与mockito不同,我必须使用jmock“any”功能。
import java.util.ArrayList;
import java.util.List;


public class ProductArray {
 private List<Product> productList;
 public ProductArray() {
  productList=new ArrayList<Product>();

 }
 public void add(Product product) {
  this.productList.add(product);
 }
 public List<Product> getProductList(){
  return this.productList;
 }
}
public class ProductTest {
 @Test
 public void testProduct() {
  DataService dataserviceMock = Mockito.mock(DataService.class);
  ProductArray productsArrayTest = getProductsArrayTest();
  Mockito.when(dataserviceMock.getProducts(Mockito.any(ProductFilter.class), Mockito.any(Date.class), Mockito.any(Date.class), Mockito.anyBoolean())).thenReturn(productsArrayTest);
  assertEquals(1, dataserviceMock.getProducts(null , null , null , false).getProductList().size());
 }
 private ProductArray getProductsArrayTest() {
     ProductArray pa = new ProductArray();
     Product product = createProduct();
     pa.add(product);
     return pa;
 }

 private Product createProduct() {
     Product p = new Product();
     p.setPrice(1.23);
     return p;
 }

}