【问题标题】:Mockito stubbing returning null when any Any arguments are used for method当任何任何参数用于方法时,Mockito 存根返回 null
【发布时间】:2020-08-06 02:37:32
【问题描述】:

我有下面的方法,我想子:

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)

这可能是什么原因?

编辑:

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

【问题讨论】:

  • "DataService.getProducts" 这是一个静态方法吗?
  • 不,它不是静态方法
  • 能否贴出getProductsArrayForTest()方法的代码?并且 DataService 是一个类但是调用 DataService.getProducts() 不是静态的?
  • 我的帖子有错误,应该是DataService的小写d,已贴出代码。
  • 这样写有帮助吗:doReturn(productsArrayTest).when(dataServiceMock).getProducts(Mockito.any(ProductFilter.class), Mockito.any(Date.class), Mockito。 any(Date.class), Mockito.any(Boolean.class));

标签: java junit mockito stubbing


【解决方案1】:
  • 在第一条评论后编辑 - 我看到您在定义 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;
     }
    }
    

    ProductTest.class

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

【讨论】:

  • 我将更改答案,以便向您展示我的代码
  • 你解决了吗?你有消息吗? @user3809938
  • 不使用 mockito,我必须使用有效的 jmock“任何”功能。
猜你喜欢
  • 2011-09-06
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多