我想使用间谍来模拟一个方法,但我需要在 return 中获取一些虚拟数据
I want to use spy to mock a method but i need to get some dummy data in return
我想模拟 getUserDataFromExt() 并将本地散列映射传递给 return 一些数据列表以及 add/assign 一些值到传入的散列映射。
注意:我不能从构造函数中注入那个 hashmap 并模拟它。
public List<Report> getUserData() {
.............
..............
Map<String, Set<Integer>> studyToRelationshipPk = new HashMap<>();
List<NetworkUserSiteDetail> uniqueList = getUserDataFromExt(studyToRelationshipPk);
..............
}
有没有一种方法可以模拟该方法并仍然从传入的本地参数和 return 一些列表中获取数据。
如果您无法重构代码,则需要为 class 创建一个 spy
(模拟 getUserDataFromExt
)。
然后你可以使用thenAnswer
修改你的HashMap和return列表:
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
移动到另一个方法并模拟它可能会更好。您仍然可以使用相同的方式修改参数和结果。
您可能还需要考虑更改方法的行为 - 因为修改参数和 return 结果 - 在其他开发人员看来可能非常出乎意料。
我想模拟 getUserDataFromExt() 并将本地散列映射传递给 return 一些数据列表以及 add/assign 一些值到传入的散列映射。
注意:我不能从构造函数中注入那个 hashmap 并模拟它。
public List<Report> getUserData() {
.............
..............
Map<String, Set<Integer>> studyToRelationshipPk = new HashMap<>();
List<NetworkUserSiteDetail> uniqueList = getUserDataFromExt(studyToRelationshipPk);
..............
}
有没有一种方法可以模拟该方法并仍然从传入的本地参数和 return 一些列表中获取数据。
如果您无法重构代码,则需要为 class 创建一个 spy
(模拟 getUserDataFromExt
)。
然后你可以使用thenAnswer
修改你的HashMap和return列表:
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
移动到另一个方法并模拟它可能会更好。您仍然可以使用相同的方式修改参数和结果。
您可能还需要考虑更改方法的行为 - 因为修改参数和 return 结果 - 在其他开发人员看来可能非常出乎意料。