为什么模拟对象有多龙和然后进行模拟



注意:我知道在间谍中,我们可以在这两者之间有所不同。我在互联网上都去了,但我仍然对doreturn/何时何时/何时/何时在Mockito中进行疑问。

1)doreturn/shile/sher/thenreturn对模拟对象的作用相同吗?即:无论您是调用doreturn/何时或何时/何时/何时/theTreturn以获取模拟对象,都不会调用真实方法,而是一个固执的调用,这并不重要。我的理解是正确的吗?

2)doreturn/何时和何时/何时/theTreturn仅对Mockito中的间谍对象有所作为。即doreturn/何时 - 不会称呼真实的methos,/theTreturn何时称为真实方法。我的理解正确吗?

如果我对上述2分的理解是正确的,那么我们应该始终使用doreturn/n时,以便我们不需要学习2个语法,对吗?

doReturn()状态的嘲讽文档:

您可以使用dothrow(),doanswer(),donothing(),doreturn()和docallrealmethod()代替对相应的呼叫wher时()(),用于任何方法。当您

时,有必要
  • 存根空白方法
  • 间谍对象上的存根方法(见下文)
  • 存根不止一次,以改变测试中间模拟的行为。

以及...

在您无法使用时(object)。

时,使用doreturn()。

给出了...

的示例

何时(mock.foo())。thenthrow(new RuntimeException());

//不可能:被称为foo()方法的异常,因此抛出了RunTimeException。 当(mock.foo())。

//您必须使用doreturn()进行固执:
doreturn(" bar")。当(模拟).foo();

通常,您应该使用when(...).thenReturn(...)语法,并且doReturn(...).when(...)语法很有用的场合很少见。但是,重要的是要注意,嘲笑空隙方法需要when(...)模式,这并不罕见。这只是doReturn(...)语法,它不太常用。

专门回答您的问题:

  1. no,两个语法的工作方式略有不同 - 'doreturn(...)'能够设置模拟对象以记录行为 调用模拟方法,而"何时(...)"语法可以通过进行一些幕后跳动 - 挑剔来建立一个存根处理程序,而" theTreturn(...)"方法可以使用该简短处理程序。他们通常会具有相同的效果,但是在上面的角案中,实施差异变得显而易见。

  2. 对于模拟,when(...)调用模拟对象上的固态方法。这就是为什么上面的角案围绕重新定义存根行为很重要。

在我自己做后,我知道:

  1. doreturn/何时和何时/何时/theTreturn对于模拟对象相同。他们都没有称为实际方法
  2. doreturn/何时和何时/何时/theTreturn对于间谍对象具有不同的行为。doreturn/何时 - 它不会在间谍对象上调用真实方法当/thanreturn时 - 它将调用间谍对象上的真实方法

希望它有帮助!

相关内容

  • 没有找到相关文章

最新更新