当前位置: 首页 > 知识库问答 >
问题:

如何模拟方法中的对象方法调用?

柴高岑
2023-03-14

下面是我要为其创建测试的类和方法:

public class RequestController {    
private GetAllInter getAnalytics;//This is an interface

@RequestMapping(value ="",method=RequestMethod.GET)
public String getAllAnalytics(){
    log.debug("Processing request for all analytics");
    String result;
    try {
        result = getAnalytics.getAll();
    } catch (Exception e) {
        result = "Could not retrieve full list of analytics";
        log.error(result,e);
    }
    return result;
}

具体地说,我希望模拟getAnalytics.getAll(),这样它就会返回一个我已经定义的字符串。而不是方法执行它的任务。这是我的代码:

public class RequestControllerTest extends Mockito{

private String allAnalyticsStr = "Hello";

@Test
public void testGetAllAnalytics(){
    GetAllInter getAll = mock(GetAllInter.class);
    when(getAll.getAll()).thenReturn("what");
    RequestController requestController = new RequestController();
    assert(requestController.getAllAnalytics().equals("Hello"));
}

共有1个答案

傅奕
2023-03-14

在执行测试之前,需要将RequestController#GetAnalytics字段替换为模拟的GetAllInter实例。

GetAllInter getAll = mock(GetAllInter.class);
when(getAll.getAll()).thenReturn("what");

该语句不会影响RequestController的getAnalytics实例行为,除非您将其设置为RequestController的字段。

我发现了类似的问题mockito-模拟接口-抛出NullPointerException

但是使用@InjectMocks将是更好的解决方案,因为您不需要修改RequestController类来进行测试。

 类似资料:
  • 如何模拟返回已强制转换的模拟对象的方法。 试验方法。

  • 问题内容: 似乎模拟仅验证模拟对象的方法是否被调用,并且模拟对象始终具有类似以下内容的东西 但是我可以创建一个模拟对象并定义 然后验证另一个对象的方法是否被调用吗? 这是我想做的事情:我定义了一个模拟环境,无论发生什么情况都返回一个响应。但是然后我想验证在不同情况下调用anotherObj的不同方法。 怎么做? 问题答案: 您可以为此使用Mockito Spy。如果您设置为间谍,则可以验证该对象上

  • 我有一个java代码,我在其中调用scala对象的方法(依赖库的)。为了编写单元测试,我想模拟scala对象的方法调用 Operations.Scala

  • 所以我想做一些事情 但我得到了空异常

  • 我试图在静态方法中模拟静态方法。 我想知道不使用任何框架是否可能。 有没有办法达到我的目的?

  • 我试图在测试中模拟一个调用,但我得到了一个错误,因为它调用了真正的方法,而不是模拟它。 这是我的方法 } 这是我的测试课 测试实际上调用了受保护的方法config Setter,并在设置代理时失败。帮助我理解我在这里做错了什么。