MockBean为什么会抛出空指针异常?

huangapple go评论102阅读模式
英文:

Why does MockBean throw NullPointer Exception

问题

I have identified the code sections you provided for translation. Here are the translations:

  1. I have a HomeController which communicated with a micro-service using feign client and displays it in the UI. Everything works fine. But when i use @MockBean to mock the microservice the test throws a null pointer exception.
  2. @FeignClient(value = "portfolio", url = "${PORTFOLIO_SERVICE:http://localhost:8092}")
  3. public interface FeignCurrentNetWorthService {
  4. @GetMapping(value = "/portfolio")
  5. public PortfolioDetails getPortfolioDetails(@RequestHeader("Authorization") String token);
  6. }
  7. package com.project.Application.controllers;
  8. import com.fasterxml.jackson.databind.ObjectMapper;
  9. import com.project.Application.model.PortfolioDetails;
  10. import com.project.Application.service.FeignCurrentNetWorthService;
  11. import org.junit.jupiter.api.BeforeEach;
  12. import org.junit.jupiter.api.Test;
  13. import org.junit.jupiter.api.extension.ExtendWith;
  14. import org.mockito.Mock;
  15. import org.mockito.junit.jupiter.MockitoExtension;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.boot.test.context.SpringBootTest;
  18. import org.springframework.boot.test.mock.mockito.MockBean;
  19. import org.springframework.boot.test.mock.mockito.MockBeans;
  20. import org.springframework.security.test.context.support.WithMockUser;
  21. import org.springframework.test.web.servlet.MockMvc;
  22. import org.springframework.test.web.servlet.setup.MockMvcBuilders;
  23. import org.springframework.web.context.WebApplicationContext;
  24. import static org.mockito.ArgumentMatchers.anyString;
  25. import static org.mockito.Mockito.*;
  26. import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user;
  27. import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
  28. import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
  29. import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
  30. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
  31. @SpringBootTest
  32. @AutoConfigureMockMvc
  33. class HomeControllerTest {
  34. @MockBean
  35. private FeignCurrentNetWorthService feignCurrentNetWorthService;
  36. @Autowired
  37. private MockMvc mockMvc;
  38. private String token;
  39. @BeforeEach
  40. public void setUp() {
  41. token = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJtb2NrIiwiYXV0aG9yaXRpZXMiOlt7ImF1dGhvcml0eSI6IlJPTEVfQURNSU4ifV0sImlhdCI6MTU5NTYwODUzNSwiZXhwIjoxNTk2NzM4NjAwfQ.cRVa78q9VrR6WOVuFMnNR8jredYGZCs_WNKXvMVQVPcjkQeKoSbzc4hP7cJKP5yx9yTrQHSYdctBJsxjnJFymA";
  42. }
  43. @Test
  44. public void testDisplayHomePage_returnsStatusOk() throws Exception {
  45. mockMvc.perform(get("/").with(user("amith").roles("ADMIN")).header("Authorization", token)).andDo(print()).andExpect(status().isOk());
  46. }
  47. @Test
  48. public void testSellStocks() throws Exception {
  49. mockMvc.perform(get("/stocks/sell/{name}", "abc").with(user("amith").roles("ADMIN"))
  50. .header("Authorization", token)).andExpect(status().isOk());
  51. }
  52. }

Here is the error message for reference:

  1. org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
  2. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
  3. ...
  4. Caused by: java.lang.NullPointerException
  5. at com.project.Application.controllers.HomeController.sellStocks(HomeController.java:47)
  6. ...
英文:

I have a HomeController which communicated with a micro-service using feign client and displays it in the UI. Everything works fine. But when i use @MockBean to mock the microservice the test throws a null pointer exception.

  1. @GetMapping(value = "/")
  2. @ApiOperation(value = "Displaying the home page", response = String.class)
  3. public String displayHomePage(Model model, HttpSession session) {
  4. log.info("{}, Information: Displaying the home page", this.getClass().getSimpleName());
  5. PortfolioDetails portfolioDetails = feignCurrentNetWorthService.getPortfolioDetails("Bearer " + session.getAttribute("token").toString());
  6. model.addAttribute("portfolioDetails", portfolioDetails);
  7. return "home";
  8. }
  1. @FeignClient(value = "portfolio",url = "${PORTFOLIO_SERVICE:http://localhost:8092}")
  2. public interface FeignCurrentNetWorthService {
  3. @GetMapping(value = "/portfolio")
  4. public PortfolioDetails getPortfolioDetails(@RequestHeader("Authorization") String token);
  5. }
  1. package com.project.Application.controllers;
  2. import com.fasterxml.jackson.databind.ObjectMapper;
  3. import com.project.Application.model.PortfolioDetails;
  4. import com.project.Application.service.FeignCurrentNetWorthService;
  5. import org.junit.jupiter.api.BeforeEach;
  6. import org.junit.jupiter.api.Test;
  7. import org.junit.jupiter.api.extension.ExtendWith;
  8. import org.mockito.Mock;
  9. import org.mockito.junit.jupiter.MockitoExtension;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.boot.test.context.SpringBootTest;
  12. import org.springframework.boot.test.mock.mockito.MockBean;
  13. import org.springframework.boot.test.mock.mockito.MockBeans;
  14. import org.springframework.security.test.context.support.WithMockUser;
  15. import org.springframework.test.web.servlet.MockMvc;
  16. import org.springframework.test.web.servlet.setup.MockMvcBuilders;
  17. import org.springframework.web.context.WebApplicationContext;
  18. import static org.mockito.ArgumentMatchers.anyString;
  19. import static org.mockito.Mockito.*;
  20. import static org.springframework.security.test.web.servlet.request.SecurityMockMvcRequestPostProcessors.user;
  21. import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.springSecurity;
  22. import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
  23. import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.print;
  24. import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
  25. @SpringBootTest
  26. @AutoConfigureMockMvc
  27. class HomeControllerTest {
  28. @MockBean
  29. private FeignCurrentNetWorthService feignCurrentNetWorthService;
  30. @Autowired
  31. private MockMvc mockMvc;
  32. private String token;
  33. @BeforeEach
  34. public void setUp() {
  35. token = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJtb2NrIiwiYXV0aG9yaXRpZXMiOlt7ImF1dGhvcml0eSI6IlJPTEVfQURNSU4ifV0sImlhdCI6MTU5NTYwODUzNSwiZXhwIjoxNTk2NzM4NjAwfQ.cRVa78q9VrR6WOVuFMnNR8jredYGZCs_WNKXvMVQVPcjkQeKoSbzc4hP7cJKP5yx9yTrQHSYdctBJsxjnJFymA";
  36. }
  37. @Test
  38. public void testDisplayHomePage_returnsStatusOk() throws Exception {
  39. mockMvc.perform(get("/").with(user("amith").roles("ADMIN")).header("Authorization", token)).andDo(print()).andExpect(status().isOk());
  40. }
  41. @Test
  42. public void testSellStocks() throws Exception {
  43. mockMvc.perform(get("/stocks/sell/{name}", "abc").with(user("amith").roles("ADMIN"))
  44. .header("Authorization", token)).andExpect(status().isOk());
  45. }
  46. }

Can someone tell me what i am doing wrong.
Here is the error. As you can see this says that in HomeController when i am calling the microservice it returns nullPointerException. But i have user @MockBean to mock the feign client. I don't know why it's throwing this error.

  1. org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
  2. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014)
  3. at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898)
  4. at javax.servlet.http.HttpServlet.service(HttpServlet.java:626)
  5. at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)
  6. at org.springframework.test.web.servlet.TestDispatcherServlet.service(TestDispatcherServlet.java:72)
  7. at javax.servlet.http.HttpServlet.service(HttpServlet.java:733)
  8. at org.springframework.mock.web.MockFilterChain$ServletFilterProxy.doFilter(MockFilterChain.java:167)
  9. at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134)
  10. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:320)
  11. at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:126)
  12. at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:90)
  13. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
  14. at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:118)
  15. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
  16. at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137)
  17. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
  18. at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:111)
  19. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
  20. at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:158)
  21. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
  22. at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63)
  23. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
  24. at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200)
  25. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
  26. at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116)
  27. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
  28. at org.springframework.security.web.csrf.CsrfFilter.doFilterInternal(CsrfFilter.java:117)
  29. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
  30. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
  31. at org.springframework.security.web.header.HeaderWriterFilter.doHeadersAfter(HeaderWriterFilter.java:92)
  32. at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:77)
  33. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
  34. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
  35. at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105)
  36. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
  37. at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56)
  38. at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119)
  39. at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:334)
  40. at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:215)
  41. at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:178)
  42. at org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurer$DelegateFilter.doFilter(SecurityMockMvcConfigurer.java:132)
  43. at org.springframework.mock.web.MockFilterChain.doFilter(MockFilterChain.java:134)
  44. at org.springframework.test.web.servlet.MockMvc.perform(MockMvc.java:183)
  45. at com.project.Application.controllers.HomeControllerTest.testSellStocks(HomeControllerTest.java:56)
  46. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  47. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  48. at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  49. at java.base/java.lang.reflect.Method.invoke(Method.java:564)
  50. at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:686)
  51. at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60)
  52. at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131)
  53. at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:149)
  54. at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:140)
  55. at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:84)
  56. at org.junit.jupiter.engine.execution.ExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(ExecutableInvoker.java:115)
  57. at org.junit.jupiter.engine.execution.ExecutableInvoker.lambda$invoke$0(ExecutableInvoker.java:105)
  58. at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
  59. at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
  60. at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
  61. at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
  62. at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:104)
  63. at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:98)
  64. at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:212)
  65. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  66. at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:208)
  67. at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:137)
  68. at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:71)
  69. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:135)
  70. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  71. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
  72. at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
  73. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
  74. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  75. at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
  76. at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
  77. at java.base/java.util.ArrayList.forEach(ArrayList.java:1510)
  78. at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
  79. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
  80. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  81. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
  82. at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
  83. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
  84. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  85. at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
  86. at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
  87. at java.base/java.util.ArrayList.forEach(ArrayList.java:1510)
  88. at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:38)
  89. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$5(NodeTestTask.java:139)
  90. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  91. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$7(NodeTestTask.java:125)
  92. at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:135)
  93. at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:123)
  94. at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
  95. at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:122)
  96. at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:80)
  97. at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:32)
  98. at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
  99. at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:51)
  100. at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:248)
  101. at org.junit.platform.launcher.core.DefaultLauncher.lambda$execute$5(DefaultLauncher.java:211)
  102. at org.junit.platform.launcher.core.DefaultLauncher.withInterceptedStreams(DefaultLauncher.java:226)
  103. at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:199)
  104. at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:132)
  105. at com.intellij.junit5.JUnit5IdeaTestRunner.startRunnerWithArgs(JUnit5IdeaTestRunner.java:71)
  106. at com.intellij.rt.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:33)
  107. at com.intellij.rt.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:220)
  108. at com.intellij.rt.junit.JUnitStarter.main(JUnitStarter.java:53)
  109. Caused by: java.lang.NullPointerException
  110. at com.project.Application.controllers.HomeController.sellStocks(HomeController.java:47)
  111. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  112. at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
  113. at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
  114. at java.base/java.lang.reflect.Method.invoke(Method.java:564)
  115. at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190)
  116. at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138)
  117. at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:105)
  118. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:878)
  119. at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:792)
  120. at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)
  121. at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1040)
  122. at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:943)
  123. at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)
  124. ... 106 more

答案1

得分: 0

@ThisIsNoZaku在评论中指出了引发异常的方法,但在测试设置中,令牌为null,所以我想知道这是否是原因。

正如其他人所指出的,您的测试设置可以简化如下:

  1. @WebMvcTest(HomeController.class)
  2. class HomeControllerTest {
  3. @MockBean
  4. private FeignCurrentNetWorthService feignCurrentNetWorthService;
  5. @Autowired
  6. private MockMvc mockMvc;
  7. private String token; // 需要赋值
  8. @BeforeEach
  9. public void setup() {
  10. token = ...
  11. }
  12. ...
  13. }
英文:

@ThisIsNoZaku has pointed out the method causing the exception in the comments however in the test setup the token is null so I wonder if this is the cause.

As others have pointed out your test setup can be simplified as below

  1. @WebMvcTest(HomeController.class)
  2. class HomeControllerTest {
  3. @MockBean
  4. private FeignCurrentNetWorthService feignCurrentNetWorthService;
  5. @Autowired
  6. private MockMvc mockMvc;
  7. private String token; // needs a value
  8. @BeforeEach
  9. public void setup() {
  10. token = ...
  11. }
  12. ...

答案2

得分: 0

我找到了问题。问题是令牌被存储在HttpSession中。当我尝试发送请求到URL来测试时,我没有添加会话属性。因为没有名为"token"的会话。它抛出了一个NullPointerException。

  1. @Test
  2. public void testSellStocks_returnsStatusOk() throws Exception {
  3. when(feignCurrentNetWorthService.getStockDetails(anyString(),anyString())).thenReturn(stockDetails);
  4. mockMvc.perform(get("/stocks/sell/{name}", "mock_name").sessionAttr("token", token))
  5. .andExpect(status().isOk()).andExpect(view().name("stock"));
  6. }

现在我已经添加了会话属性,一切都正常工作。

英文:

I found the issuse. The issue was the token was stored in the HttpSession. When i tried to send a request to the url to test i didn't add the session attribute. Because there was no session called token. It throws a NullPointerException.

  1. @Test
  2. public void testSellStocks_returnsStatusOk() throws Exception {
  3. when(feignCurrentNetWorthService.getStockDetails(anyString(),anyString())).thenReturn(stockDetails);
  4. mockMvc.perform(get("/stocks/sell/{name}", "mock_name").sessionAttr("token",token))
  5. .andExpect(status().isOk()).andExpect(view().name("stock"));
  6. }

Now that i have added the session attribute everything works fine.

huangapple
  • 本文由 发表于 2020年8月5日 00:23:59
  • 转载请务必保留本文链接:https://go.coder-hub.com/63251109.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定