当前位置: 首页 > 知识库问答 >
问题:

我如何用mockito操纵争论

姚煜
2023-03-14

我正在使用junit运行一些单元测试。其中一个调用了一个对象中的方法,我使用mockito-like模拟该对象;

@Mock
private MyClass myClass;

然后我设置mockito做一些类似的事情

Mockito.when(myClass.foo(Mockito.any()).thenReturn(bar);

现在myClass.foo实际上以我的另一个类(比如类Person)作为参数,我想做的是这样的事情

Mockito.when(myClass.foo(Person parson)).thenDo(person.setName("Name")).thenReturn(bar);

这当然是伪代码,但我希望它说明了我正在尝试做什么。这可能吗?

共有2个答案

於意蕴
2023-03-14

在这种情况下,如果您的目标是设置Person对象的字段,则可以在行之前或之后执行此操作:

Mockito.when(myClass.foo(Mockito.any()).thenReturn(bar);

doAnswer()有助于根据输入执行操作,但操作将在参数的副本而不是原始参数上执行。

林俊英
2023-03-14

您需要使用then答案或其孪生do答案方法。

参见Mockito:doAnswer Vs thenReturn

当您在模拟方法调用时知道返回值时,应该使用返回。当您调用模拟方法时,将返回此定义的值。

答案用于在调用模拟方法时需要执行其他操作时,例如,当您需要根据此方法调用的参数计算返回值时。

如果你的答案变得太复杂,可以考虑使用假答案,而不是假答案。

 类似资料:
  • 为什么下面的语句出现错误 当以下代码正常工作时

  • 用 upstart 控制 Ceph 用 ceph-deploy 把 Ceph Cuttlefish 及更高版部署到 Ubuntu 之后,你可以用基于事件的 Upstart 来启动、关闭 Ceph 节点上的守护进程。 Upstart 不要求你在配置文件里定义守护进程例程。 用下列命令列出 Ceph 作业和例程: sudo initctl list | grep ceph 详情参见 initctl 。

  • 为了简化我的问题,假设我想用有效负载中的'd'替换所有'b'字符。 有没有一种方法可以让我原生地处理JSON数据,而不是首先将数据转换为XML? 我试图构建一个自定义的类中介来放入OutSequence中,但由于我只能访问MessageContext,它将有效负载视为XML,所以我遇到了问题。 以在正常情况下传递内容(否则将在XML到JSON处理步骤中失败)。但必须有一种方法让我将数据操作为原生J

  • 这是我的JavaFX控制器 所以我的问题是,在javaFX上下文中,处理<code>未来</code>结果的习惯用法是什么? 我知道我可以做,线程将阻塞,直到操作完成,但我会阻塞Application线程。我正在考虑在完成时进行回调,我发现了,哪种类型通过thenAccep执行此操作,但基于此答案,线程仍将被阻塞,这违反了Future的要点,就像答案中提到的那样。 在我的例子中,可调用的结果(在我

  • 我用JavaFX做了一个国际象棋棋盘,并把所有的方格设置为GridPane的子方格,有没有办法用GridPane索引来访问这些方格并改变它们的属性? 我尝试通过磁贴矩阵访问一个磁贴来更改磁贴的颜色属性,但它不会更改 GridPane 中显示的磁贴。 的。getChildren()方法返回一个节点列表,一旦tile对象成为节点,我就无法访问它的方法。 这是我的磁贴类: } 这是我的董事会课: