为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

www说 2023-10-12 14:45:08
我想模拟 getUserDataFromExt() 并传递本地哈希图,并期望它返回一些数据列表,并向传入的哈希图添加/分配一些值。注意:我无法从构造函数注入该哈希图并模拟它。 public List<Report> getUserData() {    .............    ..............    Map<String, Set<Integer>> studyToRelationshipPk = new HashMap<>();                List<NetworkUserSiteDetail> uniqueList = getUserDataFromExt(studyToRelationshipPk);    ..............    }有没有一种方法可以让我模拟该方法并仍然从传入的本地参数中获取数据并返回一些列表。
查看完整描述

1 回答

?
holdtom

TA贡献1805条经验 获得超10个赞

如果您无法重构代码,则需要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其他方法并对其进行模拟。您仍然可以使用相同的方式修改参数和结果。


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


查看完整回答
反对 回复 2023-10-12
  • 1 回答
  • 0 关注
  • 96 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信