我想使用间谍来模拟一种方法,但我需要获得一些虚拟数据作为回报



我想模拟getUserDataFromExt((并传递本地哈希映射,并期望它返回一些数据列表,并为传入的哈希映射添加/分配一些值。

注意:我无法从构造函数注入该哈希映射并模拟它。

public List<Report> getUserData() {
.............
..............
Map<String, Set<Integer>> studyToRelationshipPk = new HashMap<>();
List<NetworkUserSiteDetail> uniqueList = getUserDataFromExt(studyToRelationshipPk);
..............
}

有没有办法我可以模拟该方法,并且仍然从传入的本地参数中获取数据并返回一些列表。

如果你不能重构你的代码,你需要为你的类创建一个spy(模拟getUserDataFromExt(。

然后你可以使用thenAnswer修改你的 HashMap 并返回列表:

when(spy.getUserDataFromExt()).thenAnswer(
new Answer() {
public Object answer(InvocationOnMock invocation) {
// get your method arguments
Object[] args = invocation.getArguments();
// do whatever with your hashmap
// return your list
return ...
}
}
);

如果可以重构代码,最好将方法getUserDataFromExt移动到其他方法并模拟它。您仍然可以使用相同的方法来修改参数和结果。

您可能还需要考虑更改方法的行为 - 因为修改参数并返回结果 - 从其他开发人员的角度来看可能是非常出乎意料的。