如何使用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如果你不能模拟任何东西,为什么要使用模拟框架来解决这个问题?我认为如果你不能测试它,重构总是值得的!