<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    paulwong

    一個使用MOCK的測試REST的基于SPRING的單元測試

    https://github.com/spring-projects/spring-sync-samples/tree/master/spring-rest-todos


    package todos;

    import static org.hamcrest.Matchers.*;
    import static org.mockito.Mockito.*;
    import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*;
    import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*;

    import java.util.Arrays;

    import org.junit.Before;
    import org.junit.Ignore;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.mockito.InjectMocks;
    import org.mockito.Mock;
    import org.mockito.Mockito;
    import org.mockito.MockitoAnnotations;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.http.MediaType;
    import org.springframework.test.context.ContextConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
    import org.springframework.test.context.web.WebAppConfiguration;
    import org.springframework.test.web.servlet.MockMvc;
    import org.springframework.test.web.servlet.setup.MockMvcBuilders;
    import org.springframework.web.context.WebApplicationContext;

    import com.fasterxml.jackson.databind.ObjectMapper;

    /**
     * 
    @author Roy Clarkson
     
    */
    @RunWith(SpringJUnit4ClassRunner.class)
    @WebAppConfiguration
    @ContextConfiguration(classes = Application.class)
    @Ignore
    public class MainControllerTest {

        @Autowired
        private WebApplicationContext context;

        @Mock
        private TodoRepository repository;

        @InjectMocks
        TodoController mainController;

        private MockMvc mvc;

        @Before
        public void setUp() {
            MockitoAnnotations.initMocks(this);
            mvc = MockMvcBuilders.standaloneSetup(mainController).build();
        }

        @Test
        public void testList() throws Exception {
            final Todo a = new Todo(1L, "a", false);
            final Todo b = new Todo(2L, "b", false);
            final Todo c = new Todo(3L, "c", false);
            when(repository.findAll()).thenReturn(Arrays.asList(a, b, c));

            mvc.perform(get("/todos")
                        .accept(MediaType.APPLICATION_JSON))
                    .andExpect(status().isOk())
                    .andExpect(jsonPath("$", hasSize(3)))
                    .andExpect(jsonPath("$[0].id", is(1)))
                    .andExpect(jsonPath("$[0].description", is("a")))
                    .andExpect(jsonPath("$[0].complete", is(false)))
                    .andExpect(jsonPath("$[1].id", is(2)))
                    .andExpect(jsonPath("$[1].description", is("b")))
                    .andExpect(jsonPath("$[1].complete", is(false)))
                    .andExpect(jsonPath("$[2].id", is(3)))
                    .andExpect(jsonPath("$[2].description", is("c")))
                    .andExpect(jsonPath("$[2].complete", is(false)));

             verify(repository, times(1)).findAll();
             verifyNoMoreInteractions(repository);
        }

        @Ignore
        @Test
        public void testPatch() throws Exception {

        }

        @Test
        public void testCreate() throws Exception {
            final Todo todo = new Todo(1L, "a", false);
            ObjectMapper objectMapper = new ObjectMapper();
            final byte[] bytes = objectMapper.writeValueAsBytes(todo);

            when(repository.save(Mockito.any(Todo.class))).thenReturn(todo);

            mvc.perform(post("/todos")
                        .accept(MediaType.APPLICATION_JSON)
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(bytes))
                    .andExpect(status().isOk())
                    .andExpect(jsonPath("$.id", is(1)))
                    .andExpect(jsonPath("$.description", is("a")))
                    .andExpect(jsonPath("$.complete", is(false)));

            verify(repository, times(1)).save(Mockito.any(Todo.class));
            verifyNoMoreInteractions(repository);
        }

        @Test
        public void testUpdateSameIds() throws Exception {
            final Todo updatedTodo = new Todo(1L, "z", true);
            ObjectMapper objectMapper = new ObjectMapper();
            byte[] bytes = objectMapper.writeValueAsBytes(updatedTodo);

            when(repository.save(Mockito.any(Todo.class))).thenReturn(updatedTodo);

            mvc.perform(put("/todos/{id}", 1L)
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(bytes))
                    .andExpect(status().isNoContent());

            verify(repository, times(0)).delete(1L);
            verify(repository, times(1)).save(Mockito.any(Todo.class));
            verifyNoMoreInteractions(repository);
        }

        @Test
        public void testUpdateDifferentIds() throws Exception {
            final Todo updatedTodo = new Todo(99L, "z", true);
            ObjectMapper objectMapper = new ObjectMapper();
            byte[] bytes = objectMapper.writeValueAsBytes(updatedTodo);

            when(repository.save(Mockito.any(Todo.class))).thenReturn(updatedTodo);

            mvc.perform(put("/todos/{id}", 1L)
                        .contentType(MediaType.APPLICATION_JSON)
                        .content(bytes))
                    .andExpect(status().isNoContent());

            verify(repository, times(1)).delete(1L);
            verify(repository, times(1)).save(Mockito.any(Todo.class));
            verifyNoMoreInteractions(repository);
        }

        @Test
        public void testDelete() throws Exception {
    //        this is how to test a void method with Mockito
    //        doThrow(new IllegalArgumentException()).when(repository).delete(null);

            mvc.perform(delete("/todos/{id}", 1L))
                    .andExpect(status().isNoContent());
        }

    }

    posted on 2014-10-25 09:42 paulwong 閱讀(3662) 評論(1)  編輯  收藏 所屬分類: TESTIGN

    Feedback

    # re: 一個使用MOCK的測試REST的基于SPRING的單元測試[未登錄] 2016-03-14 10:04 1

    是是是  回復  更多評論   


    主站蜘蛛池模板: 亚洲午夜电影在线观看高清| 九九久久精品国产免费看小说 | 亚洲国产精品成人久久久| 精品成人一区二区三区免费视频 | 亚洲另类激情专区小说图片| 亚洲色欲色欲www| 三年片在线观看免费西瓜视频| 国产免费午夜a无码v视频| 亚洲一卡2卡4卡5卡6卡残暴在线| 最近免费中文字幕大全免费版视频| 亚洲区小说区图片区QVOD| 一级毛片a免费播放王色| 久久亚洲精品成人av无码网站 | 好男人www免费高清视频在线| 老汉色老汉首页a亚洲| 日本大片在线看黄a∨免费| 亚洲精品天堂无码中文字幕| 成人无遮挡毛片免费看| 亚洲国产成人无码AV在线| 亚洲人成网站在线播放vr| 天天天欲色欲色WWW免费| 无码天堂va亚洲va在线va| 国产一级淫片a免费播放口之| 日韩av无码久久精品免费| 亚洲精品福利网站| 免费无码精品黄AV电影| a毛片全部播放免费视频完整18| 亚洲精品无码av人在线观看| 日韩免费观看一区| 亚洲第一页中文字幕| 亚洲国产精品尤物YW在线观看| 精品无码国产污污污免费网站国产 | 又大又黄又粗又爽的免费视频| 思思久久99热免费精品6| 国产亚洲精品a在线观看 | 国产精品亚洲专区无码WEB| 久久久亚洲欧洲日产国码二区| 国产国拍亚洲精品福利 | 亚洲w码欧洲s码免费| 亚洲AV永久无码精品| 99久久精品日本一区二区免费|