测试控制器和从控制器调用功能接口时无法模拟功能接口

问题描述 投票:0回答:1

SomeClass 实例= someService.getSomething.apply("by-something");

上面的语句在控制器中用于获取数据。我想测试控制器。所以我在测试中嘲笑上面的线,如下所示。

@模拟 私有 SomeService someService;

@模拟 私有函数 someTriggerFunction;

when(someService.getSomething.apply("by-something")).thenReturn(someTrigger);

现在它给我以下错误

org.mockito.exceptions.misusing.MissingMethodInitationException: when() 需要一个参数,该参数必须是“模拟上的方法调用”。 例如: when(mock.getArticles()).thenReturn(articles);

此外,出现此错误的原因可能是:

  1. 您存根以下任一方法:final/private/native/equals()/hashCode() 方法。 这些方法无法被存根/验证。 不支持在非公共父类上声明的模拟方法。
  2. 在when()内部,你不会调用mock上的方法,而是调用其他对象上的方法。
java spring-boot unit-testing mockito
1个回答
0
投票

你应该像这样调用

when
方法 2 次:

@Mock 
private SomeService someService;

@Mock 
private Function<String, SomeTrigger> someTriggerFunction;

...

when(someService.getSomething()).thenReturn(someTriggerFunction);
when(someTriggerFunction.apply("by-something")).thenReturn(someTrigger);
© www.soinside.com 2019 - 2024. All rights reserved.