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

使用@SpringBootTest进行测试时出现HttpMessageNotWritableException

潘畅
2023-03-14

我试图测试一个基于Spring引导的Restendpoint。代码能够返回预期的输出,但测试失败,错误如下:

已解析[org.springframework.http.converter.HttpMessageNotWritableException:预设内容类型为“null”的[class java.util.LinkedList]没有转换器

对此有任何想法都将不胜感激!

下面是相同的代码:

控制器-

@RestController
public class SampleController {
    
    @Autowired
    StudentService studentService;
    
    @GetMapping(value="students",produces = "application/json")
    public ResponseEntity<List<Student>> getStudentDetails(){
        
    return new ResponseEntity<List<Student>>(studentService.getAllStudents(),HttpStatus.OK);
    }

}

服务等级-

@Service
public class StudentService {
    
    private List<Student> listOfStudents;
    
    @PostConstruct
    public void init() {
        List<Student> list1= new LinkedList<Student>(); 
        Student s1 = new Student("a","S1");
        list1.add(s1);
        listOfStudents = list1;
    }
    
    public List<Student> getAllStudents(){
        return listOfStudents;
    }

}

波乔-

public class Student {

    private String sectionName;
    private String name;
    public String getRollNum() {
        return sectionName;
    }
    public void setRollNum(String rollNum) {
        this.sectionName = rollNum;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Student(String rollNum, String name) {
        this.sectionName = rollNum;
        this.name = name;
    }
    
    @Override
    public String toString() {
        return "Student [sectionName=" + sectionName + ", name=" + name + "]";
    }
    
    
}

试验-

@SpringBootTest(classes = {SampleController.class,StudentService.class})
@AutoConfigureMockMvc
public class SampleControllerTest {

    @Autowired
    private MockMvc mockMvc;
    
    @Autowired
    SampleController sampleController;
    
    @MockBean
    StudentService studentService;
    
    @Test
    public void getAllUsersTest() throws Exception{
        List<Student> mockedList = new LinkedList<Student>();
        Student dummyStudent = new Student("dummy","Dummy Student");
        mockedList.add(dummyStudent);
        Mockito.when(studentService.getAllStudents()).thenReturn(mockedList);
        mockMvc.perform(get("/students")).andExpect(status().isOk());
    }
}

共有1个答案

莘睿
2023-03-14

当手动配置@SpringBootTest中的属性时,springboot的默认自动配置将退出,并且您不会在所有bean中获得springtestcontext:@SpringBootTest(classes={SampleController.class,StudentService.class})。这样,您的上下文就缺少很多自动配置的bean,比如JSON转换器。

使用@springbootest而不指定来编写与整个Spring上下文的集成测试,或者使用@WebMvcTest

我想对于您的测试场景,切片测试注释@WebMvcTest(SampleController.class)就是您要寻找的。这将为您创建一个切片的SpringTestContext,它只包含相关的SpringMVC组件。它还将自动配置MockMvc实例。

 类似资料:
  • 我有spring boot应用程序,spring boot版本为1.5.8,驼峰版本为2.20.1 简单路线: 简单测试: 当我运行这个测试时,它运行得很好,我收到一条消息,endpoint满意。如果我添加注释,测试会失败吗?为什么?在运行maven clean install时也没有注释,它也会失败:( 有人知道这个注释对骆驼测试有什么作用吗,或者我如何调整它使其工作? 谢谢你

  • 我正在springboot应用程序中编写Junits,它只有一个初始化器类 以及其他控制器和服务类。 服务类的Junit如下所示: 当我运行Junit时,它会抛出如下错误: 我还尝试了所有注释,如,@ContextConfiguration(classes=Initializer.class),,但它仍会抛出相同的错误。代码中没有其他类似于应用程序上下文的配置类。

  • 我遵循一个单元测试服务的教程,我试图使用JUnit5而不是JUnit4(这是教程使用的)。当我完全按照JUnit4的教程操作时,测试工作正常,但是我得到了JUnit5的NullPointerExc0019。 存储库: 服务: 测试: 以下是异常的前几行: 生成文件的测试和依赖项部分:

  • 我有一个类(A),它包含另一个类(B)的自动生成依赖项,而另一个类(B)又具有另一个类C的自动生成依赖项。 我正在尝试使用Mockito编写测试用例,并对依赖项使用spy注释。我在监视C类时遇到空指针错误。 如何从A类执行此单元测试?

  • 问题出现在字段中。 在JUnit4中,一切都工作得很好,没有错误。我试图使用JUnit4中的,因为我在pom.xml中有一个junit-vintage-engine依赖项,但没有帮助。

  • 问题内容: 到目前为止,我有两个测试。一个仅使用jUnit框架即可正常工作。另一个使用spring-test库并在每次尝试运行该异常时创建此异常。有什么想法可能导致问题吗? Error Maven test dependencies Dependency tree 问题答案: 你是否正在使用旧版本的Eclipse(Galileo或更低版本)?还是旧版的junit插件?如果是这样,则可能是问题的原因