MockMvcユニットテスト

1865 ワード

MockMvcはHttp要求のシミュレーションを実現し、直接ネットワークの形式を使用し、Controllerの呼び出しに変換することができ、これによりテスト速度が速く、ネットワーク環境に依存せず、検証のツールを提供することができ、要求の検証を統一し、便利にすることができる. MockMvcBuilderはMockMvcを構築するためのコンストラクタで、主に2つの実装があります.StandaloneMockMvcBuilderとDefaultMockMvcBuilderは、それぞれ2つのテスト方式に対応しています.すなわち、独立してWeb環境テストをインストールおよび統合します(この方式は、実際のWeb環境を統合するのではなく、対応するMock APIを通じてシミュレーションテストを行い、サーバを起動する必要はありません).静的工場MockMvcBuildersを直接使用して作成すればよい.
@RunWith(SpringRunner.class)
@SpringBootTest()
public class test {
    @Autowired
    private WebApplicationContext wac; //  WebApplicationContext
    private MockMvc mockMvc; //  MVC 。

    @Before //  
    public void setup() {
        this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).build();
    }

    @Test
    public void test() throws Exception {
        String responseString = mockMvc.perform(get("/test") // 
                .contentType(MediaType.APPLICATION_JSON_UTF8)  // contentType 
                .param("name", " ")  //// 
                .param("phone", "18758694528")
                .accept(MediaType.APPLICATION_JSON))  // 
                .andExpect(status().isOk())   // 200
                .andDo(print())         // 
                .andExpect(content().contentType(MediaType.APPLICATION_JSON_UTF8)) // 
                .andReturn().getResponse().getContentAsString();// 

        System.out.println(responseString);
    }
}

プロジェクトにshiroフレームが使用されている場合.エラーが発生する可能性があります:org.apache.shiro.UnavailableSecurityManagerException: No SecurityManager accessible to the calling code次の内容を追加する必要があります.
private ThreadState _threadState;
protected Subject _mockSubject;

@Before
public void before() {
    _mockSubject = Mockito.mock(Subject.class);
    _threadState = new SubjectThreadState(_mockSubject);
    _threadState.bind();
}