2016년 9월 19일 월요일

Junit controller layer test

You can do the test by using spring boot junit test.

- structure
















- build.gradle

group 'org.blog.test'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'spring-boot'

buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:1.4.0.RELEASE")
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-test', version: '1.4.0.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '1.4.0.RELEASE'
    compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '1.4.0.RELEASE'
    compile group: 'com.h2database', name: 'h2', version: '1.4.192'
    compile group: 'org.projectlombok', name: 'lombok', version: '1.16.10'
    compile group: 'junit', name: 'junit', version: '4.12'
}


- TestController.java

package org.blog.test.controller;

import org.blog.test.service.TestService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {

    @Autowired
    private TestService testService;

    @GetMapping("/test/{name}")
    public String getByName(@PathVariable String name) {
        return String.valueOf(testService.getTestTableByName(name));
    }
}




- JunitApplication.java

package org.blog.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class JunitApplication {
    public static void main(String[] args) {
        SpringApplication.run(JunitApplication.class, args);
    }
}


- TestControllerTest.java

package org.blog.test.controller;

import static org.mockito.BDDMockito.given;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import java.util.ArrayList;
import java.util.List;

import org.blog.test.entity.TestTable;
import org.blog.test.service.TestService;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.http.MediaType;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.test.web.servlet.MockMvc;

@RunWith(SpringRunner.class)
@WebMvcTest(TestController.class)
public class TestControllerTest {

    @Autowired
    private MockMvc mockMvc;

    @MockBean
    private TestService testService;

    @Test
    public void getByName() throws Exception {
        //Given
        TestTable testTable = new TestTable("test");
        List resultList = new ArrayList<>();
        resultList.add(testTable);

        given(this.testService.getTestTableByName("test")).willReturn(resultList);

        //When
        this.mockMvc.perform(get("/test/test").accept(MediaType.APPLICATION_JSON))
                .andExpect(status().isOk());
    }
}




- result

MockHttpServletRequest:
      HTTP Method = GET
      Request URI = /test/test
       Parameters = {}
          Headers = {Accept=[application/json]}

Handler:
             Type = org.blog.test.controller.TestController
           Method = public java.lang.String org.blog.test.controller.TestController.getByName(java.lang.String)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = {Content-Type=[application/json;charset=UTF-8], Content-Length=[31]}
     Content type = application/json;charset=UTF-8
             Body = [TestTable(id=null, name=test)]
    Forwarded URL = null
   Redirected URL = null
          Cookies = []
 

댓글 없음 :

댓글 쓰기