如何为GET Rest服务创建单元测试(春季)

时间:2020-07-20 12:11:11

标签: java spring unit-testing testing junit

我开发了一个在MongoDb中存储Books的应用程序,该数据是从用户从控制台获取的,并将其直接保存到MongoDb中。并将Book对象的所有详细信息传递到Angular前端,我已经使用Spring制作了api。

@RestController
@RequestMapping("/api")
public class Controller {

@Autowired
    BookRepository bookRepo;

@GetMapping("/books")
    public List<Book> getBooks(){
        return bookRepo.findAll();
    }
}

API正常运行(使用邮递员检查,可以从Angular站点查看数据)
现在,我必须为此Controller类编写一个单元测试。我对测试的知识很低,请帮助我。预先感谢。

1 个答案:

答案 0 :(得分:1)

您可以尝试以下代码进行单元测试。

@RunWith(MockitoJUnitRunner.class)
public class ControllerTest {

    @Autowired
    private MockMvc mockMvc;
    
    @InjectMocks
    private Controller controller;
    
    @Mock
    BookRepository bookRepo;
    
    @Before
    public void Setup() {
        mockMvc = MockMvcBuilders.standaloneSetup(controller).build();
    }
    
    @Test
    public void testGetBooks(){
    
        Book book1 = new Book();
        book1.setBookId(101L);
        
        Book book2 = new Book();
        book2.setBookId(102L);
    
        List<Book> books = new ArrayList<>();
        books.add(book1);
        books.add(book2);
    
        Mockito.when(bookRepo.findAll()).thenReturn(books);
        
        RequestBuilder requestBuilder = MockMvcRequestBuilders.get("/api/books")
                .accept(MediaType.APPLICATION_JSON);
                
        mockMvc.perform(requestBuilder).andExpect(MockMvcResultMatchers.status().isOk());
        
        Mockito.verify(bookRepo, times(1)).findAll();   
    }   
}