<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)論   


    主站蜘蛛池模板: 亚洲人成网站免费播放| 亚洲精品第五页中文字幕| 国产亚洲Av综合人人澡精品| 最近最新MV在线观看免费高清| 亚洲人成日本在线观看| 91人成网站色www免费下载| 亚洲国产精品福利片在线观看| 特级做A爰片毛片免费看无码 | 免费99精品国产自在现线| 亚洲熟妇av一区二区三区下载| 亚洲美女免费视频| 亚洲mv国产精品mv日本mv| 成年私人影院免费视频网站| 亚洲av无码专区国产不乱码| 国产嫩草影院精品免费网址| 黄色a级片免费看| 亚洲三区在线观看无套内射| 久久国产精品成人免费| 久久久久久亚洲Av无码精品专口| 国产精品成人免费福利| 亚洲卡一卡二卡乱码新区| 国产又黄又爽又刺激的免费网址| 日本免费精品一区二区三区| 亚洲高清国产AV拍精品青青草原| 99久久99热精品免费观看国产| 亚洲一区在线视频| 免费观看日本污污ww网站一区| 久久嫩草影院免费看夜色| 亚洲第一页中文字幕| 精品少妇人妻AV免费久久洗澡 | 亚洲免费在线播放| 成人免费毛片内射美女APP| 美女尿口扒开图片免费| 亚洲av综合av一区| 妞干网免费视频观看| 一级一级一片免费高清| 亚洲最新在线视频| 亚洲精品成人a在线观看| 亚洲视频在线观看免费视频| 污污视频网站免费观看| 亚洲视频免费在线看|