如何使用Mockito-Groovy/java从void方法中获取值
这个问题需要一些帮助 我有一个像这样的无效方法如何使用Mockito-Groovy/java从void方法中获取值,java,groovy,mockito,bdd,powermock,Java,Groovy,Mockito,Bdd,Powermock,这个问题需要一些帮助 我有一个像这样的无效方法 public void doSomething(String a, String b){ ServiceUtils utils = new ServiceUtils(persistService, randomService) String c; String d; c = utils.someMethod(a, b); d = service.anotherMethod(b, null);
public void doSomething(String a, String b){
ServiceUtils utils = new ServiceUtils(persistService, randomService)
String c;
String d;
c = utils.someMethod(a, b);
d = service.anotherMethod(b, null);
if(utils.validateSomething(d)){
//...
}
persistService.persistMethod(c , d);
}
我需要获取C中的值来继续我的groovy测试
无法模拟UTIL,这对验证很重要。
无法模拟/(间谍(?)persistService,因为它在utils构造函数中使用
我如何使用mockito做到这一点?您可以使用BDDMockito.verify()和ArgumentCaptor,如下所示:
ArgumentCaptor<String> capture = ArgumentCaptor.forClass(String.class);
BDDMockito.verify(persistService).persistMethod(captor.capture(), any());
ArgumentCaptor capture=ArgumentCaptor.forClass(String.class);
验证(persistService).persistMethod(captor.capture(),any());
并通过以下方式获取值:
captor.getValue()
这假设persistService是用Mockito模拟的。问题在于方法中的“新”问题:
ServiceUtils utils = new ServiceUtils(persistService, randomService)
尝试重构代码:如果在构造函数中注入“ServiceUtils”类,则可以在测试中对此进行模拟。不起作用。在这种情况下,persistService应该是一种间谍方法,因为它用于填充整个测试中的其他内容。。。我不能在这上面用间谍,这是一个集成测试?在测试和测试设置中,您需要显示更多内容。很抱歉,缺少信息。现在修好了。仅在这种情况下重构这个方法是不值得的。@MatheusCiaramella如果你不能模拟任何东西,为什么要使用模拟框架来解决这个问题?我认为如果你不能测试它,重构总是值得的!