`
sunxboy
  • 浏览: 2828306 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

spring mvc @controller unit test

 
阅读更多

1. spring mvc controller implementation

@Controller
public class Alarm {

    @Resource(name = "db.service", shareable = true)
    private IDatabaseService dbService;

    @RequestMapping(value = "/query_alarmlogs", produces = "application/json;charset=UTF-8")
    public @ResponseBody
    AlarmLogList queryAlarmLogs(@RequestParam("queryType") String queryType, @RequestParam("lastId") String lastId) {

        AlarmQueryType alarmType = AlarmQueryType.fromValue(queryType);
        AlarmLogList list = findAlarmLogs(alarmType.getAlarmDate(), Integer.valueOf(lastId));

        return list;
    }

    private AlarmLogList findAlarmLogs(Date date, int lastId) {
        List<AlarmLogs> alarmList = dbService.findAlarmLogs(date, lastId);
        AlarmLogList alarms = new AlarmLogList(alarmList);
        return alarms;
    }

    private final class AlarmLogList extends ArrayList<AlarmLogs> {
        private static final long serialVersionUID = 1L;

        public AlarmLogList(List<AlarmLogs> list) {
            super(list);
        }
    }

    public void setDbService(IDatabaseService dbService) {
        this.dbService = dbService;
    }

}

 

2. test it.

package com.eifesun.mornitor.web;

import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasSize;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;

import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.Date;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Mockito;
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.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;

import com.eifesun.monitor.DeviceType;
import com.eifesun.monitor.service.IDatabaseService;
import com.eifesun.monitor.service.MongoDBServiceImpl;
import com.eifesun.monitor.web.Alarm;
import com.eifesun.monitor.web.command.AlarmQueryType;
import com.eifesun.monitor.web.model.AlarmLogs;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/spring/mvc-core-config.xml", "/spring/business-config.xml"})
@WebAppConfiguration
public class AlarmControllerTest {

    private MockMvc mockMvc;
    @Autowired
    public RequestMappingHandlerAdapter handlerAdapter;
    @Mock
    private IDatabaseService mockDbService;
    @Autowired
    private Alarm alarm;

    @Before
    public void init() {
        mockDbService = Mockito.mock(MongoDBServiceImpl.class);
        alarm.setDbService(mockDbService);
        this.mockMvc = MockMvcBuilders.standaloneSetup(alarm).build();
    }

    @Test
    public void testQueryAlarmLogs() throws Exception {

        AlarmLogs log1 = new AlarmLogs(DeviceType.INVERTER, "inverter1", "panel 1 over volage");
        AlarmLogs log2 = new AlarmLogs(DeviceType.INVERTER, "inverter1", "panel 2 over volage");

        int lastId = 0;
        String queryType = "alarm_auto";
        Date date = AlarmQueryType.fromValue(queryType).getAlarmDate();
        Mockito.when(mockDbService.findAlarmLogs(date, lastId)).thenReturn(Arrays.asList(log1, log2));

        //@formatter:off
        mockMvc.perform(get("/query_alarmlogs?queryType=alarm_auto&lastId=0"))
                        .andExpect(status().isOk())
                        .andExpect(content().contentType(APPLICATION_JSON_UTF8))
                        .andExpect(jsonPath("$", hasSize(2)))
                        .andExpect(jsonPath("$[0].clientId", equalTo("inverter1")))
                        .andExpect(jsonPath("$[0].deviceType", equalTo("INVERTER")))
                        .andExpect(jsonPath("$[0].description", equalTo("panel 1 over volage")))
                        .andExpect(jsonPath("$[1].clientId", equalTo("inverter1")))
                        .andExpect(jsonPath("$[1].deviceType", equalTo("INVERTER")))
                        .andExpect(jsonPath("$[1].description", equalTo("panel 2 over volage")));
         //@formatter:on
        verify(mockDbService, times(1)).findAlarmLogs(date, lastId);
        verifyNoMoreInteractions(mockDbService);
    }

    public static final MediaType APPLICATION_JSON_UTF8 = new MediaType(MediaType.APPLICATION_JSON.getType(), MediaType.APPLICATION_JSON.getSubtype(),
            Charset.forName("utf8"));
}

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics