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

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

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

    paulwong

    一個(gè)使用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 閱讀(3659) 評(píng)論(1)  編輯  收藏 所屬分類: TESTIGN

    Feedback

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

    是是是  回復(fù)  更多評(píng)論   


    主站蜘蛛池模板: 拔擦拔擦8x华人免费久久| 免费国产a理论片| 男性gay黄免费网站| 国产福利在线免费| 亚洲高清日韩精品第一区| 成人无码a级毛片免费| 亚洲伊人久久成综合人影院| 美女黄色毛片免费看| 免费乱码中文字幕网站| 日韩电影免费在线观看网址 | 中文字幕av无码无卡免费| 亚洲精品亚洲人成在线麻豆| 国产亚洲婷婷香蕉久久精品 | 亚洲区小说区图片区QVOD| 久久久受www免费人成| 国产精品免费观看久久| 成人亚洲国产va天堂| 四虎成人免费影院网址| 青草青草视频2免费观看| 中国亚洲女人69内射少妇| 免费在线观看一级片| 免费99热在线观看| 美女黄频a美女大全免费皮| 亚洲欧洲成人精品香蕉网| 99xxoo视频在线永久免费观看| 亚洲国产成人在线视频| 免费无码一区二区三区蜜桃大| 有码人妻在线免费看片| 久久亚洲AV午夜福利精品一区| 福利免费观看午夜体检区| 无码天堂va亚洲va在线va| 亚洲精品乱码久久久久66| 青青青国产在线观看免费| 国产成人亚洲精品播放器下载| 久久亚洲国产精品五月天婷| 67pao强力打造国产免费| 国产区图片区小说区亚洲区| 亚洲国产精品成人精品无码区| 日韩毛片免费无码无毒视频观看| 一级大黄美女免费播放| 亚洲激情黄色小说|