在单元测试中对Json字符串的Spring响应对象

问题描述

我有一个Spring Boot Rest控制器,它返回一个对象。像这样:

@RestController
@RequestMapping("books-rest")
public class SimpleBookRestController {
    
    @GetMapping("/{id}",produces = "application/json")
    public ResponseEntity<Book> getBook(@PathVariable int id) {
        return findBookById(id);
    }
 
    
}

我有一个测试此控制器方法的单元测试(mockito模拟内部的服务调用)。像这样:

@RunWith(MockitoJUnitRunner.Silent.class)
public class SimpleBookRestControllerTest {

    @Autowired
    @InjectMocks
    private SimpleBookRestController simpleBookRestController;
    @Mock
    private MyService myservice;

我现在要测试将反序列化为JSON字符串的对象对spring的作用。 在测试中,我只是测试对象,这很好。 但是我现在有一个错误,我想在单元测试中查看JSON字符串。

你会怎么做?

解决方法

您不仅需要简单的单元测试-function add<KS extends Keys>( pathToArray: [...KS],value: DeepIndex<Foo,KS> extends Array<infer T> ? T : never ) { const xs = path(pathToArray,foo); if (Array.isArray(xs)) { xs.push(value); } } 不会处理到JSON的转换,因此您不能仅对其进行单元测试。

请参阅本指南:https://spring.io/guides/gs/testing-web/,或查找使用add(["bs","ds"],{ e: null,f: 1 }); /* function add<["bs","ds"]>(pathToArray: ["bs",value: { e: null; f: number; }): void */ add(["bs"],{}); // Argument of type '{}' is not assignable to parameter of // type '{ c: boolean; ds: { e: null; f: number; }[]; }'. add(["a"],{}); // Argument of type '{}' is not assignable to parameter of type 'never'.(2345) add(["bs","c"],{}); // Argument of type '{}' is not assignable to parameter of type 'never'.(2345) 的示例,这是一种测试整个Web层的方法,包括REST调用及其响应。