Junit mockito的ongoingstubbing是什么?我们在哪里使用它?

Junit mockito的ongoingstubbing是什么?我们在哪里使用它?,junit,mockito,stubbing,Junit,Mockito,Stubbing,任何人都可以解释mockito中正在进行的存根是什么,以及它如何帮助编写Junit Testcase和模拟方法。是一个接口,允许您指定响应方法调用的操作。你永远不需要直接提到OngoingStubing;对它的所有调用都应该在以开头的语句中以链式方法调用的形式发生,当时 //Mockito.when返回一个ongoingstubing, //因为foo.bar应该返回字符串。 when(foo.bar())。然后返回(“baz”); //像thenReturn和thenThrow这样的方法也允许

任何人都可以解释mockito中正在进行的存根是什么,以及它如何帮助编写Junit Testcase和模拟方法。

是一个接口,允许您指定响应方法调用的操作。你永远不需要直接提到OngoingStubing;对它的所有调用都应该在以
开头的语句中以链式方法调用的形式发生,当

//Mockito.when返回一个ongoingstubing,
//因为foo.bar应该返回字符串。
when(foo.bar())。然后返回(“baz”);
//像thenReturn和thenThrow这样的方法也允许在进行Tubbing时返回,
//因此,您可以将任意多个操作链接在一起。
when(foo.bar()).thenReturn(“baz”).thenThrow(newexception());
请注意,Mockito至少需要一个对OnGoingStubing方法的调用,否则它将抛出UnfinishedStubingException。但是,直到下次您与Mockito交互时,它才知道存根尚未完成,因此这可能是导致非常奇怪错误的原因

//错误:这将引发UnfinishedStubbingException。。。
when(foo.bar());
你的测试;
//…但是当你下一次与Mockito互动时,失败就会降临到这里。
when(foo.qux()),然后return(42);
尽管在技术上可以保留对OngoingStubing对象的引用,但Mockito并未定义该行为,通常认为这是一个非常糟糕的想法。这是因为Mockito是有状态的,并且

//坏:这样你很容易陷入麻烦。
OngoingStubbing stuber=when(foo.bar());
stubber=stubber.thenReturn(“baz”);
stubber=stubber.thenReturn(“quux”);

您指的是班级吗?您的问题有点不清楚。请保留对OnGoingStubing对象的引用,因为最终用户不会这样做。它不是这样设计的。引用ongoingstubing的唯一合理理由是,当一个人在mockito之上开发功能时,它需要了解mockito的内部工作。这仍然是真的吗?给定的链接不存在,文档站没有提到我们永远不需要直接引用OngoingStubing?@user谢谢;该链接仅指向您在评论中链接的页面。要明确的是,OngoingStubing是Mockito的DSL(领域特定语言)的关键部分;您将经常与OnGoingStubing进行交互,并在
时调用在其上定义并通过
返回的方法。也就是说,正如Mockito贡献者Brice在上面确认的那样,您不需要将OnGoingStubing实例保存到字段中,也不需要按名称引用OnGoingStubing(除非您编写了类似PowerMock的Mockito扩展API)。