【问题标题】:I want to use spy to mock a method but i need to get some dummy data in return我想使用 spy 来模拟一个方法,但我需要得到一些虚拟数据作为回报
【发布时间】:2019-10-09 15:13:42
【问题描述】:

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

注意:我无法从构造函数中注入该哈希图并对其进行模拟。

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

    ..............
    }

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

【问题讨论】:

    标签: java mocking mockito junit4


    【解决方案1】:

    如果你不能重构你的代码,你需要为你的类创建一个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 移动到不同的方法并模拟它。您仍然可以使用相同的方式来修改参数和结果。

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

    【讨论】:

      猜你喜欢
      • 2012-07-20
      • 1970-01-01
      • 2011-03-01
      • 2016-10-23
      • 2022-06-10
      • 2019-06-30
      • 2011-02-25
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多