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

时间:2019-10-09 15:13:42

标签: java mocking mockito junit4

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

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

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

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

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

1 个答案:

答案 0 :(得分: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移至另一个方法并对其进行模拟。您仍然可以使用相同的方式来修改参数和结果。

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