java - 当任何 Any 参数用于方法时,Mockito stub 返回 null

标签 java junit mockito stubbing

我有以下我想要子的方法:

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

最佳答案

  • 在第一条评论后编辑 - 我发现您在定义 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;
     }
    }
    

    产品测试.类

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

关于java - 当任何 Any 参数用于方法时,Mockito stub 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61375891/

相关文章:

java - 使用 JUnit 临时文件夹并在系统退出时检查文件是否存在

java - 使用mockito来 stub final方法

java - 如何对这个线程代码进行单元测试

java - 具有身份验证的 Spring Boot 项目结构

java - 如何在Java项目中为类文件配置模板

java - Java 中十六进制 key 、IV 和数据的 AES 加密

java - 为接口(interface)中的默认方法编写 Junit 测试用例

junit - 我可以从 intellij 插件开始 junit 测试吗

java - Mockito 如何用输出参数模拟 void 方法?

java - 如何在 Chrome 下载中访问父级下角色的 (Xpath) 值