考虑一个方法签名,如:
public String myFunction(String abc);
Run Code Online (Sandbox Code Playgroud)
Mockito可以帮助返回方法收到的相同字符串吗?
我希望能够创建一个像这样的函数:
class A {
private String extraVar;
public String myFormat(String format, Object ... args){
return String.format(format, extraVar, args);
}
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是在方法中args处理,因此是单个参数,而我希望每个in 都作为新参数传递.既然也是一个带有变量参数的方法,这应该是可能的.Object[]myFormatString.formatObjectargsString.format
如果这是不可能的,有没有像这样的方法String.format(String format, Object[] args)?在这种情况下,我可以在前面加上extraVar到args使用新的数组,并把它传递给该方法.
有没有办法在mockito的thenReturn函数中枚举列表中的项目,所以我返回列表中的每个项目.到目前为止我已经这样做了:
List<Foo> returns = new ArrayList<Foo>();
//populate returns list
Mockito.when( /* some function is called */ ).thenReturn(returns.get(0), returns.get(1), returns.get(2), returns.get(3));
Run Code Online (Sandbox Code Playgroud)
这完全符合我的要求.每个函数被调用时,它会从列表,如返回一个不同的对象get(1),get(2)等等.
但是我希望简化这个并使其对任何大小的列表更具动态性,以防我有一个大小为100的列表.我尝试过这样的事情:
Mockito.when( /* some function is called */ ).thenReturn(
for(Foo foo : returns) {
return foo;
}
);
Run Code Online (Sandbox Code Playgroud)
我也试过这个:
Mockito.when(service.findFinancialInstrumentById(eq(1L))).thenReturn(
for (int i=0; i<returns.size(); i++) {
returns.get(i);
}
);
Run Code Online (Sandbox Code Playgroud)
但是,这并不工作....我怎么这么枚举内的这个名单thenReturn....我遇到其他的方法来喜欢then或者answer,但我不知道哪一个最适合在这种情况下.
when(/* some method call*/).thenReturn(mockFetchReturn).thenReturn(mockFetchReturn2)
.thenReturn(mockFetchReturn3);
Run Code Online (Sandbox Code Playgroud)
这工作正常,我可以使用不同的输出调用模拟方法三次。但是我的输出列表可以针对每个测试场景进行更改,并且我找不到如何根据不同的返回在循环中完成此操作。例如,如果我传递 10 个 mockFetchReturn3 对象的列表,那么应该有 10 个 return 语句。