Spring Boot控制器测试,空指针异常

布罗迪曼:

我正在学习制作API。我正在尝试对我的Get请求运行测试,但是在我的测试类中一直得到Null Pointer Exception。我错过了什么?

我正在使用Spring Boot / Maven / Java11。据我所知,这是一个非常基本的设置,因为我刚刚开始涉足Spring Boot。

请参见下面的代码:

控制器测试等级:

package ControllerTest;

import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.ResultMatcher;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
import org.springframework.test.web.servlet.result.MockMvcResultMatchers;

public class StatControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @Test
    public void testGetResponse()
            throws Exception {

        MockHttpServletRequestBuilder builder = MockMvcRequestBuilders
                .get("/get");

        ResultMatcher contentMatcher = MockMvcResultMatchers.content()
                .string("GET Response");

        mockMvc.perform(builder).andExpect(contentMatcher).andExpect(MockMvcResultMatchers.status().isOk());
    }
}

控制器类别:

package apiPackage;

import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

@RestController
public class StatController {

    @RequestMapping("/")
    public String index(){
        return "Welcome to the SilverSnacks Stat Sheet!";
    }

    @GetMapping("/get")
    public @ResponseBody ResponseEntity<String> get(){
        return new ResponseEntity<String>("GET Response", HttpStatus.OK);
    }

    @GetMapping("/get/{id}")
    public @ResponseBody ResponseEntity<String> getById(@PathVariable String id){
        return new ResponseEntity<String>("GET Response:" + id, HttpStatus.OK);
    }

    @PutMapping("/put")
    public @ResponseBody ResponseEntity<String> put(){
        return new ResponseEntity<String>("PUT Response", HttpStatus.OK);
    }

    @PostMapping("/post")
    public @ResponseBody ResponseEntity<String> post(){
        return new ResponseEntity<String>("POST Response", HttpStatus.OK);
    }

    @DeleteMapping("/delete")
    public @ResponseBody ResponseEntity<String> delete(){
        return new ResponseEntity<String>("DELETE Response", HttpStatus.OK);
    }

    @PatchMapping("/patch")
    public @ResponseBody ResponseEntity<String> patch(){
        return new ResponseEntity<String>("PATCH Response", HttpStatus.OK);
    }
}

错误输出:

java.lang.NullPointerException
    at ControllerTest.StatControllerTest.testGetResponse(StatControllerTest.java:26)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:566)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
shahaf:

尝试将以下注释添加到 StatControllerTest

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class StatControllerTest {

    @Autowired
    private MockMvc mockMvc;
....
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

使用Spring Boot进行测试会引发空指针异常

Spring Boot JUnit 测试 beanFactory.getBean 空指针异常

在Spring Boot中处理Rest控制器中的异常

Spring Boot 1.5.2 控制器层测试

spring boot starter 邮件空指针异常

Mockito Spring Boot提供了空指针异常

Spring Boot项目空指针异常

Spring MVC 控制器测试 PUT

Spring Boot REST控制器验证

Spring Boot控制器404

Spring Boot菜单组件控制器

没有控制器的spring boot应用程序异常处理程序

Spring Boot-自定义Rest控制器异常处理HTTP状态

JPA 自定义转换器中的空指针异常 - Spring boot

如何使用 spring boot 和 mockito 对控制器方法进行单元测试

Spring Boot-Web MVC测试未找到控制器映射

Spring-Boot WebMvcTest:如何使用Authentication对象参数测试控制器方法?

具有属性值的RequestMapping的Spring Boot REST控制器测试

Spring Boot Application无法运行2个控制器的集成测试

Spring Boot 控制器单元测试:无法加载 ApplicationContext

不存在应用程序类时的 Spring Boot 测试控制器

使用Spring Boot,Kotlin和Junit进行休息控制器单元测试

Spring Boot-控制器测试失败并显示404代码

Spring Boot 单元测试未获取模拟控制器的请求映射

如何为我的 Spring Boot 控制器执行单元测试?

如何在Spring Boot中编写控制器的单元测试

Spring Boot - 控制器上的单元测试 - 404 答案

使用Spring Boot REST控制器和JSON的空字段

如何测试Spring MVC控制器测试响应实体?