我对Mockito很陌生,我不知道下面的例子(提供了类,只测试编写)以及如何解决它。我尝试做的是使用一个测试double作为供应商,这样我们就可以在测试中控制返回的问候语,并AssertGreetingService不会以任何方式修改问候语消息。然后Assert返回的问候语字符串等于“Hello Andy "。第一个
ut6juiuv1#
Mockito.when(greetingSupplier.get().forName(name)).thenReturn("Hello %s.");你不能像这样链接调用,你需要产生中间结果,比如
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方法来实现。
@Before
rekjcdws2#
你的嘲笑是错误的。
您模拟了Supplier<Greeting>,默认行为是返回null。因此,当您在第一行中调用greetingSupplier.get()时,它将返回null。您直接链接forName,而不是基本的null.forName,这将导致错误。你的第二部分实际上(有点)正确。
Supplier<Greeting>
null
greetingSupplier.get()
forName
null.forName
Mockito.when(greetingSupplier.get()).thenReturn(new Greeting("Hello %s."));
现在,您可以从greetingSupplier.get()正确返回响应,而不是链接调用。然而我认为你的练习是错误的。为什么?当在Spring中使用Supplier<?>时,它实际上是一个懒惰的beanFactory.getBean调用。你可以用这种方法懒惰地注入依赖关系。你应该有一个Greeting的mock,它返回一个硬编码的String,你可以检查它。
Supplier<?>
beanFactory.getBean
Greeting
String
2条答案
按热度按时间ut6juiuv1#
Mockito.when(greetingSupplier.get().forName(name)).thenReturn("Hello %s.");
你不能像这样链接调用,你需要产生中间结果,比如
对于依赖注入,你需要用模拟的Supplier来创建测试主题,例如,你可以用
@Before
方法来实现。rekjcdws2#
你的嘲笑是错误的。
您模拟了
Supplier<Greeting>
,默认行为是返回null
。因此,当您在第一行中调用greetingSupplier.get()
时,它将返回null
。您直接链接forName
,而不是基本的null.forName
,这将导致错误。你的第二部分实际上(有点)正确。
现在,您可以从
greetingSupplier.get()
正确返回响应,而不是链接调用。然而我认为你的练习是错误的。为什么?当在Spring中使用
Supplier<?>
时,它实际上是一个懒惰的beanFactory.getBean
调用。你可以用这种方法懒惰地注入依赖关系。你应该有一个Greeting
的mock,它返回一个硬编码的String
,你可以检查它。