<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 閱讀(3659) 評論(1)  編輯  收藏 所屬分類: TESTIGN

    Feedback

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

    是是是  回復(fù)  更多評論   


    主站蜘蛛池模板: 美女扒开尿口给男人爽免费视频| 国产亚洲人成无码网在线观看 | 午夜成人无码福利免费视频| 91嫩草国产在线观看免费| 亚洲免费在线观看视频| 国产香蕉免费精品视频| 亚洲Av无码一区二区二三区 | 免费精品国产自产拍在| 亚洲人色大成年网站在线观看| 222www免费视频| 亚洲国产高清在线精品一区| 免费看污成人午夜网站| 亚洲国产欧美一区二区三区| 国产免费黄色大片| 一级毛片免费视频网站| 人人狠狠综合久久亚洲婷婷| 久久久久免费看黄a级试看| 亚洲网红精品大秀在线观看| 国产卡一卡二卡三免费入口| 亚洲欧洲无码一区二区三区| 亚洲成AV人网址| 国产综合免费精品久久久| 亚洲精品国产免费| 免费黄色大片网站| 国产亚洲精品免费视频播放| 91久久亚洲国产成人精品性色| 成人免费视频69| 成年网在线观看免费观看网址| 亚洲国产成人精品不卡青青草原| 久久久久久精品免费免费自慰| 亚洲国产成人无码AV在线| 最新国产AV无码专区亚洲| 1000部免费啪啪十八未年禁止观看| 亚洲AV综合色区无码一二三区| 国内精品99亚洲免费高清| 免费看片在线观看| jizz日本免费| 亚洲一级免费视频| 亚洲色成人中文字幕网站| 最近中文字幕mv手机免费高清| 成人国产精品免费视频|