java - 我想使用 spy 来模拟方法,但我需要获得一些虚拟数据作为返回

标签 java mocking mockito junit4

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

注意:我无法从构造函数注入(inject)该 HashMap 并模拟它。

 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 移动到其他方法并模拟它。您仍然可以使用相同的方式修改参数和结果。

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

关于java - 我想使用 spy 来模拟方法,但我需要获得一些虚拟数据作为返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58307265/

相关文章:

java - 单元测试 Java switch - 案例逻辑 - 多个单独的函数或多次调用

Java的replaceFirst不替换括号

java - 在 Android 中将 double 转换为字符串

java - 口水工作台 : How to call User defined static Java Method from Drool Rule

Python 猴子补丁最佳实践

java - 在这种情况下,部分模拟有什么问题?

java - Wildfly 8 : Not able to deploy Jolokia running at different port w. r.t同一IP下的其他应用程序

java - 使用 Mockito 从模拟中抛出已检查的异常

php - 在 PHPUnit 中实现给定接口(interface)的模拟对象上的未定义方法?

java - 在 SpringBoot 应用之外使用 MockMVC