我正在使用 PowerMockito
和 Mockito
库。在模拟方法时,仅当 JsonObject 类型的方法输入满足某些条件时,我才需要声明返回值。例如,对于键 query
的值等于 queryValue
的所有输入,返回声明的值。
我在下面的代码中结束,我可以检查 then
方法中的输入,这很好,但问题是我认为对于条件不满足的 JsonObjects,它将返回一个空值,因为我必须返回一个值对于 then
方法。
final String queryValue = "some values";
PowerMockito.when(instance.myMethod(Mockito.any(JsonObject.class)))
.then(ans -> {
JsonObject input = ans.getArgument(0);
if (queryValue.equals(graphQlQuery.getString("query")))
return resultValue;
else
return null;
});
所以我想知道有没有办法在调用方法时在输入上指定这样的条件?
谢谢
答案 0 :(得分:0)
您需要使用与 any
不同的参数匹配器。 Mockito Documentation 的示例展示了如何匹配不同的参数。
在您的示例中,您不需要复杂的东西:
.when(instance.myMethod(ArgumentMatchers.argThat(
(JsonObject input) -> queryValue.equals(input.getString("query"))
)))
.thenReturn(resultValue)
问题是我认为对于条件不满足的 JsonObjects,它将返回一个空值,因为我必须为 then 方法返回一个值。
只是为了避免任何误解:如果您使用上面的代码,模拟仍然为没有被任何存根匹配的调用返回一个默认值 (null
)。
此代码的不同之处在于您可以添加具有不同匹配器的 other 存根,以处理不同的情况(当参数不是“查询”时)。在您的原始代码中,您必须在同一个地方处理所有调用。