首页 > 解决方案 > Mockito when().thenReturn() 用法

问题描述

所以基本上,我正在尝试编写一个单元测试,但我的问题是我们是否需要模拟变量/对象的每个参数?这不是通过手动输入正确的值来简单地破坏目的。

public class MainClass{

    public void somefunction(Object obj){
        List<someOtherClass> lists = obj.list;
        for (someOtherClass list:lists){
             System.out.println(list.v1+list.v2);
        }
    }
}

public class SomeClass {

  public String id;    
  public List<SomeOtherClass> list;

}

public class SomeOtherClass {
public String v1;
public String v2;

}

在我的测试文件中:

class MainClassTest {
    
    List<SomeOtherClass> list = new ArrayList<>();
    SomeOtherClass list1 = spy(new SomeOtherClass()); // as adviced here: https://stackoverflow.com/questions/33125769/mockito-when-thenreturn-doesnt-work-properly

    @Test
    void someFunction(){
    when(list1.v1).thenReturn("v1");
    // When I do the above line and try to print `list1.v1` I still get null value. 
    }
}
  1. 我应该只模拟 v1 和 v2 然后创建列表吗?哪个是正确和更有效的方法?我实际上有很多变量,通过null检查 NPE 会很痛苦。

标签: javaunit-testingjunitmockito

解决方案


推荐阅读