簡體   English   中英

Spring 啟動 - 單元測試未檢測到 controller 測試

[英]Spring Boot - unit test not detecting the controller test

我已經為 controller class 編寫了單元測試,但是當我使用“mvn 測試”或直接從“SpringBootDemo1ApplicationTests”運行單元測試時,僅在“SpringBootDemo1ApplicationTests”class 運行下進行測試,並且它不會從“BookControllerTest”883995818121 中獲取測試

SpringBootDemo1ApplicationTests.java:

package com.sprboot.SpringBootDemo1;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
class SpringBootDemo1ApplicationTests {

    @Test
    void contextLoads() {
    }

}

BookControllerTest.java

package com.sprboot.SpringBootDemo1;

import com.sprboot.SpringBootDemo1.controllers.BookController;
import com.sprboot.SpringBootDemo1.models.Book;
import com.sprboot.SpringBootDemo1.services.BookService;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.json.AutoConfigureJsonTesters;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.json.JacksonTester;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.test.web.servlet.MockMvc;

import java.util.Optional;

import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
import static org.mockito.BDDMockito.given;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;

@AutoConfigureJsonTesters
@WebMvcTest(BookController.class)
@SpringBootTest
public class BookControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private BookService bookService;

    @Autowired
    private JacksonTester<Book> jsonBook;

    @Test
    private void canRetriveBookById() throws Exception {
        given(bookService.getBookByID(123)).willReturn(Optional.of(new Book(123, "test book")));

        MockHttpServletResponse response = mockMvc.perform(
                        get("/getBookById/123")
                                .accept(MediaType.APPLICATION_JSON))
                .andReturn().getResponse();

        // then
        assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
        assertThat(response.getContentAsString()).isEqualTo(
                jsonBook.write(new Book(1, "test book")).getJson()
        );

    }

    private void canRetriveBookByIdV2() throws Exception {
        given(bookService.getBookByID(123)).willReturn(Optional.of(new Book(123, "test book")));

        MockHttpServletResponse response = mockMvc.perform(
                        get("/getBookById/123")
                                .accept(MediaType.APPLICATION_JSON))
                .andReturn().getResponse();

        // then
        assertThat(response.getStatus()).isEqualTo(HttpStatus.OK.value());
        assertThat(response.getContentAsString()).isEqualTo(
                jsonBook.write(new Book(1, "test book")).getJson()
        );

    }
}

我期待測試“canRetriveBookById”也能運行,但只測試“contextLoads”運行,不確定這里有什么問題。

這是因為您的@Test方法是私有的。

來自@Test注釋文檔:

@Test methods must not be private or static and must not return a value.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM