使用mockito示例进行依赖注入

r3i60tvu  于 2022-11-08  发布在  其他
关注(0)|答案(2)|浏览(228)

我对Mockito很陌生,我不知道下面的例子(提供了类,只测试编写)以及如何解决它。我尝试做的是使用一个测试double作为供应商,这样我们就可以在测试中控制返回的问候语,并AssertGreetingService不会以任何方式修改问候语消息。然后Assert返回的问候语字符串等于“Hello Andy "。
第一个

ut6juiuv

ut6juiuv1#

Mockito.when(greetingSupplier.get().forName(name)).thenReturn("Hello %s.");
你不能像这样链接调用,你需要产生中间结果,比如

Supplier<Greeting> supplier = mock(Supplier.class);
Mockito.when(supplier).forName().thenReturn("Hello %s.");
Mockito.when(greetingSupplier.get()).thenReturn(supplier);

对于依赖注入,你需要用模拟的Supplier来创建测试主题,例如,你可以用@Before方法来实现。

rekjcdws

rekjcdws2#

你的嘲笑是错误的。

Mockito.when(greetingSupplier.get().forName(name)).thenReturn("Hello %s.");

您模拟了Supplier<Greeting>,默认行为是返回null。因此,当您在第一行中调用greetingSupplier.get()时,它将返回null。您直接链接forName,而不是基本的null.forName,这将导致错误。
你的第二部分实际上(有点)正确。

Mockito.when(greetingSupplier.get()).thenReturn(new Greeting("Hello %s."));

现在,您可以从greetingSupplier.get()正确返回响应,而不是链接调用。
然而我认为你的练习是错误的。为什么?当在Spring中使用Supplier<?>时,它实际上是一个懒惰的beanFactory.getBean调用。你可以用这种方法懒惰地注入依赖关系。你应该有一个Greeting的mock,它返回一个硬编码的String,你可以检查它。

相关问题