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")); }
相关推荐
10. **Unit Testing and Integration Testing**:在"spring-mvc-test-sample-master"项目中,很可能包含了对这些控制器和业务逻辑的单元测试以及集成测试,使用JUnit、Mockito等工具进行。 11. **Spring MVC Test ...
Spring MVC通过控制器(Controller)来接收HTTP请求,然后根据请求类型(如POST)和URL映射来调用相应的处理方法。这些方法通常会返回一个ModelAndView对象或直接返回一个视图名,或者在处理REST请求时,返回一个...
4. **MVC(Model-View-Controller)**:Spring MVC是Spring提供的Web开发框架,用于构建RESTful应用程序。示例中会展示如何配置DispatcherServlet、创建Controller、模型绑定以及视图解析。 5. **JPA(Java ...
6. **MVC框架**:Spring MVC是Spring提供的Web应用开发模块,提供了模型-视图-控制器架构,支持RESTful风格的URL设计,以及视图解析、数据绑定等功能。 7. **数据访问**:Spring支持JDBC模板、Hibernate、MyBatis等...
在4.1.6版本中,Spring增强了对注解的支持,如`@Service`、`@Repository`和`@Controller`,这些注解用于标记服务层、持久层和控制层的类。同时,`@Autowired`用于自动装配依赖,`@Qualifier`可以精确匹配依赖注入的...
对于控制器的测试,MVC(Model-View-Controller)框架是关键。在Spring Boot中,我们通常使用`@RestController`来标记控制器类,`@RequestMapping`、`@GetMapping`、`@PostMapping`等注解用于处理HTTP请求。测试控制...
3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................
1. **MVC设计模式**:Java Web开发中常见的架构模式,模型(Model)负责数据处理,视图(View)用于展示,控制器(Controller)处理用户请求并协调Model与View。 2. **Spring框架**:作为Java企业级应用的核心框架...
使用`@SpringBootTest`注解可以启动整个Spring应用上下文,进行集成测试。 10. **Logging**:日志记录对于调试和监控应用状态至关重要。项目可能会使用Logback或Log4j进行日志记录,通过`@Slf4j`或类似的注解,可以...
8. **Unit和Integration Testing**: 为了确保代码质量,项目可能会包含JUnit和Mockito等测试框架的单元测试,以及Spring Boot的Test Slice功能进行集成测试。这些测试有助于发现和修复潜在问题,保证软件的稳定性和...
3. New Features and Enhancements in Spring Framework 4.0 ............................................ 17 3.1. Improved Getting Started Experience .........................................................
8. **Unit Testing与Integration Testing**:Spring框架提供了测试支持,如`@SpringBootTest`和`@WebMvcTest`注解,用于进行单元测试和集成测试。项目中应该包含了针对各个组件的测试用例,以确保代码质量。 9. **...
2. **Spring MVC**:处理HTTP请求,实现Controller逻辑。 3. **Spring Data JPA/MyBatis**:数据访问层,与数据库交互,支持ORM(对象关系映射)。 4. **Thymeleaf/FreeMarker**:视图模板引擎,用于渲染动态生成的...
- 应用中的每个组件都有对应的测试目录,如`test/unit`和`test/integration`,可以编写测试用例。 7. **持续集成与部署**: - "bookmarks"工程可以与Jenkins、Git等工具配合,实现自动化构建和部署。 - 使用...
Struts2提供了MVC(Model-View-Controller)设计模式的实现,Spring则负责依赖注入(Dependency Injection)和事务管理,而Hibernate是ORM(Object-Relational Mapping)框架,用于简化数据库操作。 Struts2框架...
2. Unit Test和Integration Test:编写测试用例,确保服务器功能的正确性和稳定性。 七、监控与日志 1. ELK Stack(Elasticsearch, Logstash, Kibana):收集、分析和可视化服务器日志,便于问题排查。 2. ...
6. **单元测试(Unit Test)**:为了确保代码质量,项目可能包含JUnit测试,用于验证各个功能模块的正确性。 7. **集成开发环境(IDE)**:开发者可能使用Eclipse、IntelliJ IDEA等IDE进行编码,这些工具提供了代码...
可能还有Spring Boot的Test Slice特性来进行集成测试。 **关键组件** 1. **Controller层**: 处理HTTP请求,将请求映射到对应的业务逻辑,并将结果转换为响应。 2. **Service层**: 实现核心业务逻辑,通常包含业务...
8. `test/`: 测试目录,Rails支持多种测试框架,如RSpec、Test::Unit等,这里存放着针对应用的各种测试用例。 9. `bin/`: 包含一些可执行脚本,如`spring`(Rails应用的预加载服务)和`rails`命令行工具。 10. `...
1. **MVC架构**:许多Java后端应用遵循Model-View-Controller模式,用以分离业务逻辑、数据模型和用户界面。 2. **Spring框架**:Java后端开发中常见的一个全功能框架,用于简化开发、注入依赖、处理HTTP请求等。 3....