【问题标题】:JUnit mocking method callJUnit 模拟方法调用
【发布时间】:2018-04-27 16:10:22
【问题描述】:

我正在为类“classA”中的方法“methodA”编写一个 Junit 测试。在“methodA”中,调用了“classB”类的另一个方法“methodB”。 'methodB' 调用肥皂网络服务。我想模拟这个methodBsoap 网络服务调用。在这种情况下,我打电话给classA.methodA。在这里,我找不到在调用 classB.methodB 时应该更新模拟值的方法。我浏览了许多关于Mockito 的链接,但它们都指仅从junit 类更新模拟值。那么,我怎样才能通过嘲笑他们的价值。

@Test
public void junitTest() {
 String arg1 = "arg1";
 classA aObj = new classA();
 aObj.methodA(arg1);
}

public classA {
 public string methodA(String arg1) {
  classB bObj = new classB();
  bObj.methodB();
  //somwthing on arg1
  return result;
 }
}

public classB {
 public list methodB() {
  //web-service call
  return list from web - service.
 }
}

【问题讨论】:

标签: junit mockito


【解决方案1】:

我正在为课堂上的 methodA 方法编写一个 Junit 测试 classA

由于您正在对 methodAclassA 进行单元测试,因此您应该专注于仅模拟 bObj.methodB(); 调用。你不应该深入了解它在内部做什么或不做什么。

不是您在methodA 中创建classB 对象,这不是理想的情况。您应该使用适当的 getter、setter 和构造函数将 bObj 作为 classA 的实例变量。

然后从你的测试类中设置这个 classB 依赖。

你应该像这样构建你的代码和一些测试:

class classAMicroTest {
    @Test
    public void junitTest() {
        String arg1 = "arg1";
        classA aObj = new classA();

        classB mockedBobj = Mockito.mock(classB.class);
        Mockito.when(mockedBobj.methodB()).thenReturn(new ArrayList<>());
        aObj.setbObj(mockedBobj);

        aObj.methodA(arg1);

        Mockito.verify(mockedBobj, times(1)).methodB());
    }

}

class classA {

    classB bObj;

    public void setbObj(classB bObj) {
        this.bObj = bObj;
    }

    public String methodA(String arg1) {
        bObj.methodB();
        // somwthing on arg1
        return result;
    }

}

class classB {

    public List<String> methodB() {
        return new ArrayList<>();
    }
}

【讨论】:

  • 谢谢@Shanu Gupta
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多