首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >存根链式函数调用产生NullPointerException

存根链式函数调用产生NullPointerException
EN

Stack Overflow用户
提问于 2019-08-06 14:52:04
回答 1查看 263关注 0票数 0

在我的Spring项目中,我有测试,我想存根一个链式函数调用。

要测试的函数调用是:

代码语言:javascript
运行
复制
private String sniffPayload(HttpServletRequest request) throws IOException {
        return request.getReader().lines().collect(Collectors.joining(System.lineSeparator()));
    }

在我的单元测试中,我使用Mockito来模拟HttpServletRequest

代码语言:javascript
运行
复制
import org.springframework.boot.test.mock.mockito.MockBean;

@MockBean
private HttpServletRequest mockedRequest;

然后,在我的测试功能中:

代码语言:javascript
运行
复制
    @Test
    void testMyFunction() throws Exception {

     // I try to stub the function return 
     // But get NullPointerException at runtime

 when(mockedRequest.getReader().lines().collect(Collectors.joining(System.lineSeparator()))).thenReturn("FooBarData");

    ...
    }

当我运行这个测试时,我得到了NullPointerException作为代码行的when(mockedRequest.getReader().lines().collect(Collectors.joining(System.lineSeparator()))).thenReturn("FooBarData");

为什么?如何在传递链接函数返回的同时摆脱这个NullPointerException

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-08-06 16:29:34

Afaik @MockBean不创建deep stub mocks,这意味着不支持模拟调用的链接。

您的问题是mockedRequest.getReader()返回null。

您可以切换到只使用mockito

(如果你不需要任何自动装配/什么的话)

而imho似乎与HttpServletRequest的情况无关)

代码语言:javascript
运行
复制
@Mock(answer = Answers.RETURNS_DEEP_STUBS)

否则,您必须为每个调用的方法提供不同的模拟。

代码语言:javascript
运行
复制
Stream stream = Mockito.mock(Stream.class);
when(stream.collect(Collectors.joining(System.lineSeparator()))).thenReturn("FooBarData");

BufferedReader reader = Mockito.mock(BufferedReader.class);
when(reader.lines()).thenReturn(stream);

when(mockedRequest.getReader()).thenReturn(reader)

模拟流是非常丑陋的,所以您可能需要用一个真正的流来代替这个部分,后者提供了匹配的答案。

例如:

代码语言:javascript
运行
复制
Stream<String> stream = Stream.of("FooBarData");

when(reader.lines()).thenReturn(stream);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57378790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档