`
sunxboy
  • 浏览: 2877487 次
  • 性别: 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"));
}

 

 

 

分享到:
评论

相关推荐

    spring-mvc-test-sample-master.zip_spring mvc_springmvc-test

    10. **Unit Testing and Integration Testing**:在"spring-mvc-test-sample-master"项目中,很可能包含了对这些控制器和业务逻辑的单元测试以及集成测试,使用JUnit、Mockito等工具进行。 11. **Spring MVC Test ...

    spring-mvc-rest-post-unit-testing:Spring MVC REST JSON发布请求单元测试示例

    Spring MVC通过控制器(Controller)来接收HTTP请求,然后根据请求类型(如POST)和URL映射来调用相应的处理方法。这些方法通常会返回一个ModelAndView对象或直接返回一个视图名,或者在处理REST请求时,返回一个...

    spring3.0的最新官方例子源码spring-samples

    4. **MVC(Model-View-Controller)**:Spring MVC是Spring提供的Web开发框架,用于构建RESTful应用程序。示例中会展示如何配置DispatcherServlet、创建Controller、模型绑定以及视图解析。 5. **JPA(Java ...

    spring-unit-tests:Spring Boot +单元测试+ Mockito + MVC-用于控制器和服务层

    对于控制器的测试,MVC(Model-View-Controller)框架是关键。在Spring Boot中,我们通常使用`@RestController`来标记控制器类,`@RequestMapping`、`@GetMapping`、`@PostMapping`等注解用于处理HTTP请求。测试控制...

    Spring 3.x企业应用开发实战.pdf

    6. **MVC框架**:Spring MVC是Spring提供的Web应用开发模块,提供了模型-视图-控制器架构,支持RESTful风格的URL设计,以及视图解析、数据绑定等功能。 7. **数据访问**:Spring支持JDBC模板、Hibernate、MyBatis等...

    Struts2.3.28+spring4.1.6+hibernate4.3.8整合总结(注解)

    在4.1.6版本中,Spring增强了对注解的支持,如`@Service`、`@Repository`和`@Controller`,这些注解用于标记服务层、持久层和控制层的类。同时,`@Autowired`用于自动装配依赖,`@Qualifier`可以精确匹配依赖注入的...

    spring-framework-reference-4.1.2

    3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................

    Java运输管理后台系统源码.zip

    1. **MVC设计模式**:Java Web开发中常见的架构模式,模型(Model)负责数据处理,视图(View)用于展示,控制器(Controller)处理用户请求并协调Model与View。 2. **Spring框架**:作为Java企业级应用的核心框架...

    SpringRestBasicProject

    使用`@SpringBootTest`注解可以启动整个Spring应用上下文,进行集成测试。 10. **Logging**:日志记录对于调试和监控应用状态至关重要。项目可能会使用Logback或Log4j进行日志记录,通过`@Slf4j`或类似的注解,可以...

    spring-bulletin-board

    8. **Unit和Integration Testing**: 为了确保代码质量,项目可能会包含JUnit和Mockito等测试框架的单元测试,以及Spring Boot的Test Slice功能进行集成测试。这些测试有助于发现和修复潜在问题,保证软件的稳定性和...

    spring-framework-reference4.1.4

    3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................

    SpringRestaurants

    8. **Unit Testing与Integration Testing**:Spring框架提供了测试支持,如`@SpringBootTest`和`@WebMvcTest`注解,用于进行单元测试和集成测试。项目中应该包含了针对各个组件的测试用例,以确保代码质量。 9. **...

    毕业设计SpringBoot版.zip

    2. **Spring MVC**:处理HTTP请求,实现Controller逻辑。 3. **Spring Data JPA/MyBatis**:数据访问层,与数据库交互,支持ORM(对象关系映射)。 4. **Thymeleaf/FreeMarker**:视图模板引擎,用于渲染动态生成的...

    《Grails权威指南》中的bookmarks工程代码

    - 应用中的每个组件都有对应的测试目录,如`test/unit`和`test/integration`,可以编写测试用例。 7. **持续集成与部署**: - "bookmarks"工程可以与Jenkins、Git等工具配合,实现自动化构建和部署。 - 使用...

    SSH+JQuery插件+Mysql

    Struts2提供了MVC(Model-View-Controller)设计模式的实现,Spring则负责依赖注入(Dependency Injection)和事务管理,而Hibernate是ORM(Object-Relational Mapping)框架,用于简化数据库操作。 Struts2框架...

    指尖的Android之实战篇---服务器端

    2. Unit Test和Integration Test:编写测试用例,确保服务器功能的正确性和稳定性。 七、监控与日志 1. ELK Stack(Elasticsearch, Logstash, Kibana):收集、分析和可视化服务器日志,便于问题排查。 2. ...

    tank坦克大战-java项目

    6. **单元测试(Unit Test)**:为了确保代码质量,项目可能包含JUnit测试,用于验证各个功能模块的正确性。 7. **集成开发环境(IDE)**:开发者可能使用Eclipse、IntelliJ IDEA等IDE进行编码,这些工具提供了代码...

    app-spotify-be:后端Spotify

    可能还有Spring Boot的Test Slice特性来进行集成测试。 **关键组件** 1. **Controller层**: 处理HTTP请求,将请求映射到对应的业务逻辑,并将结果转换为响应。 2. **Service层**: 实现核心业务逻辑,通常包含业务...

    rbnp-551

    8. `test/`: 测试目录,Rails支持多种测试框架,如RSpec、Test::Unit等,这里存放着针对应用的各种测试用例。 9. `bin/`: 包含一些可执行脚本,如`spring`(Rails应用的预加载服务)和`rails`命令行工具。 10. `...

    Backend-DuAnTN

    1. **MVC架构**:许多Java后端应用遵循Model-View-Controller模式,用以分离业务逻辑、数据模型和用户界面。 2. **Spring框架**:Java后端开发中常见的一个全功能框架,用于简化开发、注入依赖、处理HTTP请求等。 3....

Global site tag (gtag.js) - Google Analytics