OngoingStubbing是一个接口,允许您指定响应方法调用的操作您永远不应该直接引用OngoingStubbing;对它的所有调用都应该在以
任何人都能解释mockito中正在进行的Stubbing是什么吗?以及它如何帮助在Junit Testcase中编写和嘲笑这些方法。
when
开头的语句中作为链式方法调用进行
// Mockito.when returns an OngoingStubbing<String>,
// because foo.bar should return String.
when(foo.bar()).thenReturn("baz");
// Methods like thenReturn and thenThrow also allow return OngoingStubbing<T>,
// so you can chain as many actions together as you'd like.
when(foo.bar()).thenReturn("baz").thenThrow(new Exception());
请注意,Mockito至少需要一个对OngoingStubbing方法的调用,否则它将抛出UnfinishedStubbingException。然而,直到下次与Mockito交互时,它才知道存根尚未完成,因此这可能是导致非常奇怪错误的原因。
// BAD: This will throw UnfinishedStubbingException...
when(foo.bar());
yourTest.doSomething();
// ...but the failure will come down here when you next interact with Mockito.
when(foo.quux()).thenReturn(42);
尽管在技术上可以保留对OngoingStubbing对象的引用,但Mockito并没有定义这种行为,通常认为这是一个非常糟糕的主意。这是因为Mockito是有状态的,并且在存根期间通过副作用进行操作。
// BAD: You can very easily get yourself in trouble this way.
OngoingStubbing stubber = when(foo.bar());
stubber = stubber.thenReturn("baz");
stubber = stubber.thenReturn("quux");