前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >junit+mock+spring-test构建后台单元测试

junit+mock+spring-test构建后台单元测试

作者头像
用户2193479
发布于 2019-02-22 08:04:56
发布于 2019-02-22 08:04:56
3.5K00
代码可运行
举报
文章被收录于专栏:全栈全栈
运行总次数:0
代码可运行

from:从0开始,构建前后端分离应用

1. 一些基本概念

1.1 为什么要进行单元测试?我自己的理解是

1、能够快速发现问题。避免衍生BUG的出现

    在对一些现有代码进行修改时,或者修改现有BUG的时候。都有可能对已有的代码产生影响,产生新的问题。那么怎么能避免新问题的产生呢?那就是执行回归测试,但如果是人工进行费时费力,测试的还不全面。况且一般在进度的压力下,相信很少有人会因为修改一个问题而去回归测试以前的功能。

2、前后端分离的基础

    前后端分离的前提就是前后端不互相依赖,前后端的开发是并行的。前端不可能等待后端接口开发完成后在进行页面的开发,后端同样也不能等待页面出来后在开发后端功能。那么调试就成了问题,怎么办?单元测试就解决了这一问题,对于后端来讲,可以使用Mock的方式,模拟request请求,达到测试的目的。

3、发布代码的质量保证

    如果项目是使用Maven管理的,那么根据Maven对项目周期的定义,test是进行打包、部署的前提条件,也就是每次进行打包或者部署,都是经过单元测试的。那么就从出口确保了代码的质量,将发现BUG的时机提前,提高工作效率。

1.2 什么是Mock

1、在单元测试过程中,到处都充满着Mock这个东西,它是什么?

  Mock的英文意思就是模仿、伪装,简单一点儿理解,就是对测试过程中,测试用例对外部的依赖(难以构造的,或者未完成)的一个模仿,在后台的单元测试过程中,可以将难以构造的HttpRequest请求进行Mock。

2、在百度过程中发现了JMockit、Mockito等等,这些都是什么?

  JMockit和Mockito都是用于单元测试的Mock框架,在我的项目里选择的是Mockito

1.3对后台的测试粒度

采用junit+mock+spring-test进行的测试,是对SpringMvc的一个完整的测试,测试过程会包含DispatcherServlet、数据绑定、拦截器等环节,甚至连视图渲染都可以进行测试。是对后台请求的一个完整测试。并且不需要启动tomcat服务器

2. 添加依赖

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 <dependency>
 2     <groupId>junit</groupId>
 3     <artifactId>junit</artifactId>
 4     <version>${version.junit}</version>
 5     <scope>test</scope>
 6 </dependency>
 7 <dependency>
 8     <groupId>org.springframework</groupId>
 9     <artifactId>spring-test</artifactId>
10     <version>${version.spring}</version>
11     <scope>test</scope>
12     <exclusions>
13         <exclusion>
14             <groupId>org.testng</groupId>
15             <artifactId>testng</artifactId>
16         </exclusion>
17     </exclusions>
18 </dependency>
19 <dependency>
20     <groupId>org.mockito</groupId>
21     <artifactId>mockito-all</artifactId>
22     <version>${version.mockito}</version>
23     <scope>test</scope>
24 </dependency>
25 <dependency>
26     <groupId>org.hamcrest</groupId>
27     <artifactId>hamcrest-all</artifactId>
28     <version>${version.hamcrest}</version>
29     <scope>test</scope>
30 </dependency>

版本信息

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<version.mockito>1.10.19</version.mockito>
<version.hamcrest>1.3</version.hamcrest>
<version.junit>4.12</version.junit>
<version.spring>5.0.2.RELEASE</version.spring>

以上需要注意的是hamcrest是需要引入的,否则有可能会报错,junit需要依赖它。它的作用,我们在编写的时候往往是编写断言来判断测试结果,hamcrest是对junit断言的增强,提供更强大的匹配规则,具体参见Hamcrest官网:http://hamcrest.org/JavaHamcrest/

3. 一些注意事项

1、在编写测试用例的时候,往往要编写基类。@RunWith这个注解是不能写在基类中的,否则基类也会被当成测试用例而执行。而基类中是没有任何测试方法的,这时候junit会报错     有一个变通的方法,@RunWith注解仍然写在基类上,但是为基类增加@Ignore注解,这样在执行Test的时候,就不执行基类了 2、测试代码放在哪个路径下,这里一定注意,卡了我很久。我最开始的时候写在了/project/test/路径下,结果就是无论怎么执行test命令,测试用例都不行,提示“no tests to run”     正确的方式应该是将测试代码放在/project/src/test/java/路径下

3、在基类中应该做什么事情?     定义基类的目的,就是将公共的代码抽象到更高的层次。这里包括注解和代码 4、测试过程的环节     准备测试环境,包括Spring上下文的配置、测试数据、mockMvc初始化、请求头信息的设置、返回预期的设置等     通过MockMvc执行请求     使用断言对结果 进行验证

4. 具体实现

BaseTest.java: 1、定义通用注解,由于代码中的注解都是可以继承的,因此完全可以抽象到基类中,避免其他的测试用例重复的声明这些注解     注意,@Ignore是必须要添加的,否则Maven的surefire插件也会将基类当成一个测试用例来运行,而基类中是没有任何测试方法的,结果就是报错 2、buildResultActions方法中,定义所有请求的通用设置,header信息,及请求结果的期望值,还有对测试过程的打印。其中就使用了hamcrest判断结果中是否包含SUCCESS信息,如果不包含就证明出错了。另外还定义了Session信息,否则后台会因为session中没有用户信息,而将请求拦截住。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 1 package com.wt.test.common;
 2 
 3 import com.google.gson.Gson;
 4 import com.wt.common.security.handler.HttpSessionHandler;
 5 import com.wt.common.security.model.SysUser;
 6 import org.hamcrest.Matchers;
 7 import org.junit.After;
 8 import org.junit.Before;
 9 import org.junit.Ignore;
10 import org.junit.runner.RunWith;
11 import org.slf4j.Logger;
12 import org.slf4j.LoggerFactory;
13 import org.springframework.beans.factory.annotation.Autowired;
14 import org.springframework.http.MediaType;
15 import org.springframework.test.context.ContextConfiguration;
16 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
17 import org.springframework.test.context.web.WebAppConfiguration;
18 import org.springframework.test.web.servlet.MockMvc;
19 import org.springframework.test.web.servlet.ResultActions;
20 import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
21 import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
22 import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
23 import org.springframework.test.web.servlet.setup.MockMvcBuilders;
24 import org.springframework.transaction.annotation.Transactional;
25 import org.springframework.web.context.WebApplicationContext;
26 
27 /**
28  * @ProjectName: syInfo
29  * @Package: com.wt.com.wt.test
30  * @Description:
31  * @Author: lichking2017@aliyun.com
32  * @CreateDate: 2018/5/19 下午5:04
33  * @Version: v1.0
34  */
35 
36 @RunWith(SpringJUnit4ClassRunner.class)
37 @ContextConfiguration(locations = {"classpath:spring.xml", "classpath:spring-mybatis.xml", "classpath:spring-redis.xml"})
38 @WebAppConfiguration
39 @Transactional
40 @Ignore
41 public class BaseTest {
42     Logger logger = LoggerFactory.getLogger(BaseTest.class);
43 
44     @Autowired
45     WebApplicationContext webApplicationContext;
46 
47     protected MockMvc mockMvc;
48 
49     protected SysUser loginUser;
50 
51     protected Gson gson = new Gson();
52 
53     @Before
54     public void setUp() throws Exception {
55         mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
56         loginUser = this.createLoginUser();
57     }
58 
59 
60     /**
61      * 通用设置
62      * @param mhsrb
63      * @return
64      */
65     protected ResultActions buildResultActions(MockHttpServletRequestBuilder mhsrb) {
66         mhsrb.contentType(MediaType.APPLICATION_JSON_UTF8_VALUE)
67                 .accept(MediaType.APPLICATION_JSON_UTF8_VALUE)
68                 .header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36")
69                 .header("X-Requested-With", "XMLHttpRequest")
70                 .sessionAttr(HttpSessionHandler.Items.LOGINUSER.name(), loginUser);
71         try {
72             return mockMvc
73                     .perform(mhsrb)
74                     .andExpect(MockMvcResultMatchers.status().isOk())
75                     .andExpect(MockMvcResultMatchers.content().contentType(MediaType.APPLICATION_JSON_UTF8_VALUE))
76                     .andExpect(MockMvcResultMatchers.content().string(Matchers.containsString("SUCCESS")))
77                     .andDo(MockMvcResultHandlers.print());
78         } catch (Exception e) {
79             logger.error("请求通用设置出错",e);
80         }
81         return null;
82     }
83 
84 
85     private SysUser createLoginUser() {
86         SysUser sysUser = new SysUser();
87         sysUser.setUserId("0279c9d48c774b5b825dfb6d1058a816");
88         sysUser.setAccount("admin");
89         sysUser.setUserName("系统超级管理员");
90         return sysUser;
91     }
92 
93     @After
94     public void tearDown() throws Exception {
95 
96     }
97 
98 }

测试用例:SysUserControllerTest 1、对于新增用的测试,主要是比对新增前后的表的记录数 2、对更新用户的测试,主要是比对更新后的用户名与要更新的名称是否一致 3、删除用户,也是比对删除前后的记录实现的

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  1 package com.wt.common.security.controller;
  2 
  3 import com.wt.common.security.model.SysUser;
  4 import com.wt.common.security.service.SysUserService;
  5 import com.wt.test.common.BaseTest;
  6 import org.hamcrest.Matchers;
  7 import org.junit.Assert;
  8 import org.junit.Test;
  9 import org.springframework.beans.factory.annotation.Autowired;
 10 import org.springframework.test.annotation.Rollback;
 11 import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
 12 
 13 import java.text.SimpleDateFormat;
 14 import java.util.Date;
 15 import java.util.List;
 16 
 17 import static org.hamcrest.MatcherAssert.assertThat;
 18 
 19 /**
 20  * @ProjectName: syInfo
 21  * @Package: com.wt.common.security.controller
 22  * @Description:
 23  * @Author: lichking2017@aliyun.com
 24  * @CreateDate: 2018/5/19 下午5:01
 25  * @Version: v1.0
 26  */
 27 public class SysUserControllerTest extends BaseTest {
 28 
 29     SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
 30 
 31     @Autowired
 32     private SysUserService sysUserService;
 33 
 34     private SysUser sysUser;
 35 
 36     @Override
 37     public void setUp() throws Exception {
 38         super.setUp();
 39         sysUser = this.createSysUser();
 40     }
 41 
 42     @Test
 43     public void findSysUserByUserId() throws Exception {
 44     }
 45 
 46     @Test
 47     @Rollback
 48     public void create() throws Exception {
 49         List<SysUser> sysUsers = sysUserService.selectAll();
 50         int beforCount = sysUsers.size() + 1;
 51         super.buildResultActions(MockMvcRequestBuilders
 52                 .post("/sysUser/create")
 53                 .content(gson.toJson(sysUser)));
 54         List<SysUser> sysUserList = sysUserService.selectAll();
 55         int afterCount = sysUserList.size();
 56         Assert.assertTrue(beforCount == afterCount);
 57     }
 58 
 59     @Test
 60     public void removeUser() throws Exception {
 61         List<SysUser> beforeUsers = sysUserService.selectAll();
 62         int beforCount = beforeUsers.size();
 63         String userId = "";
 64         for (SysUser sysUser : beforeUsers) {
 65             if ("admin".equals(sysUser.getAccount())) {
 66                 continue;
 67             }
 68             userId = sysUser.getUserId();
 69             break;
 70         }
 71 
 72         super.buildResultActions(MockMvcRequestBuilders
 73                 .delete("/sysUser/{userId}", userId)).andReturn();
 74 
 75         List<SysUser> afterUsers = sysUserService.selectAll();
 76         int afterCount = afterUsers.size()+1;
 77         assertThat(beforCount, Matchers.equalTo(afterCount));
 78     }
 79 
 80     @Test
 81     public void update() throws Exception {
 82         try {
 83             List<SysUser> beforeUsers = sysUserService.selectAll();
 84             SysUser forUpdate = new SysUser();
 85             String targetName = simpleDateFormat.format(new Date());
 86 
 87             for (SysUser sysUser : beforeUsers) {
 88                 if ("admin".equals(sysUser.getAccount())) {
 89                     continue;
 90                 }
 91                 forUpdate = sysUser;
 92                 break;
 93             }
 94             String userId = forUpdate.getUserId();
 95             forUpdate.setUserName(targetName);
 96             super.buildResultActions(MockMvcRequestBuilders.put("/sysUser").content(gson.toJson(forUpdate)));
 97             SysUser updatedUser = sysUserService.findById(userId,SysUser.class);
 98             Assert.assertTrue(targetName.equals(updatedUser.getUserName()));
 99         } catch (Exception e) {
100             e.printStackTrace();
101         }
102     }
103 
104     private SysUser createSysUser() {
105         SysUser sysUser = new SysUser();
106         sysUser.setUserName("测试数据" + simpleDateFormat.format(new Date()));
107         sysUser.setPassword("ceshi");
108         sysUser.setAccount(simpleDateFormat.format(new Date()));
109         sysUser.setInUse(true);
110         sysUser.setMail("test@aliyun.com");
111         return sysUser;
112     }
113 }

5. 具体结果

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running com.wt.test.common.BaseTest
Tests run: 1, Failures: 0, Errors: 0, Skipped: 1, Time elapsed: 0.007 sec
Running com.wt.common.security.controller.SysUserControllerTest
2018-05-21 21:02:46,563  INFO WebTestContextBootstrapper:257 - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.test.context.web.ServletTestExecutionListener, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener, org.springframework.test.context.support.DependencyInjectionTestExecutionListener, org.springframework.test.context.support.DirtiesContextTestExecutionListener, org.springframework.test.context.transaction.TransactionalTestExecutionListener, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener]
2018-05-21 21:02:46,583  INFO WebTestContextBootstrapper:184 - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@217ed35e, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@7dcf94f8, org.springframework.test.context.support.DependencyInjectionTestExecutionListener@229f66ed, org.springframework.test.context.support.DirtiesContextTestExecutionListener@31190526, org.springframework.test.context.transaction.TransactionalTestExecutionListener@662ac478, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@6743e411]
2018-05-21 21:02:46,714  INFO XmlBeanDefinitionReader:316 - Loading XML bean definitions from class path resource [spring.xml]
2018-05-21 21:02:47,012  INFO XmlBeanDefinitionReader:316 - Loading XML bean definitions from class path resource [spring-mybatis.xml]
2018-05-21 21:02:47,058  INFO XmlBeanDefinitionReader:316 - Loading XML bean definitions from class path resource [spring-redis.xml]
2018-05-21 21:02:47,074  INFO GenericWebApplicationContext:589 - Refreshing org.springframework.web.context.support.GenericWebApplicationContext@59af0466: startup date [Mon May 21 21:02:47 CST 2018]; root of context hierarchy
2018-05-21 21:02:47,325  INFO AutowiredAnnotationBeanPostProcessor:154 - JSR-330 'javax.inject.Inject' annotation found and supported for autowiring
2018-05-21 21:02:48,565  INFO RequestMappingHandlerMapping:549 - Mapped "{[/syslogPerformance/getData],methods=[GET]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SyslogPerformanceController.getData()
2018-05-21 21:02:48,571  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysUser],methods=[PUT]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysUserController.update(com.wt.common.security.model.SysUser)
2018-05-21 21:02:48,571  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysUser/create],methods=[POST]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysUserController.create(com.wt.common.security.model.SysUser)
2018-05-21 21:02:48,572  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysUser/login],methods=[GET]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysUserController.login(java.lang.String,java.lang.String) throws com.wt.common.security.exception.BaseSecurityException
2018-05-21 21:02:48,573  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysUser/userByUserId/{userId}],methods=[GET]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysUserController.findSysUserByUserId(java.lang.String)
2018-05-21 21:02:48,573  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysUser/{userId}],methods=[DELETE]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysUserController.removeUser(java.lang.String)
2018-05-21 21:02:48,574  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysUser/userAll],methods=[GET]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysUserController.queryAllUser()
2018-05-21 21:02:48,575  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysUser/deleteBatch],methods=[DELETE]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysUserController.removeUsers(java.util.List<java.lang.String>)
2018-05-21 21:02:48,576  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysUser/{id}],methods=[GET]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysUserController.querySysMenu(java.lang.String)
2018-05-21 21:02:48,576  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysUser/getData],methods=[GET]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysUserController.getData()
2018-05-21 21:02:48,584  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysMenu],methods=[PUT]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysMenuController.update(com.wt.common.security.model.SysMenu)
2018-05-21 21:02:48,585  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysMenu/{id}],methods=[DELETE]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysMenuController.delete(java.lang.String)
2018-05-21 21:02:48,586  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysMenu/create],methods=[POST]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysMenuController.create(com.wt.common.security.model.SysMenu)
2018-05-21 21:02:48,586  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysMenu/{id}],methods=[GET]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysMenuController.querySysMenu(java.lang.String)
2018-05-21 21:02:48,587  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysMenu/deleteBatch],methods=[DELETE]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysMenuController.deleteBatch(java.util.List<java.lang.String>)
2018-05-21 21:02:48,588  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysMenu/queryAdminMenu],methods=[GET]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysMenuController.queryAdminMenu()
2018-05-21 21:02:48,589  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysMenu/queryAll],methods=[GET]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysMenuController.queryAll()
2018-05-21 21:02:48,590  INFO RequestMappingHandlerMapping:549 - Mapped "{[/sysMenu/getData],methods=[GET]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysMenuController.getData()
2018-05-21 21:02:48,592  INFO RequestMappingHandlerMapping:549 - Mapped "{[/upload/uploadImage],methods=[POST]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.upload.controller.UploadFileController.uploadImage(org.springframework.web.multipart.MultipartFile[]) throws com.wt.common.upload.exception.UploadException
2018-05-21 21:02:48,592  INFO RequestMappingHandlerMapping:549 - Mapped "{[/upload/deleteFile/{fileId}],methods=[DELETE]}" onto public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.upload.controller.UploadFileController.deleteFile(java.lang.String)
2018-05-21 21:02:48,762  INFO RequestMappingHandlerAdapter:568 - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@59af0466: startup date [Mon May 21 21:02:47 CST 2018]; root of context hierarchy
2018-05-21 21:02:48,850  INFO RequestMappingHandlerAdapter:568 - Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@59af0466: startup date [Mon May 21 21:02:47 CST 2018]; root of context hierarchy
2018-05-21 21:02:49,252  INFO DruidDataSource:928 - {dataSource-1} inited
2018-05-21 21:02:49,566  INFO TransactionContext:105 - Began transaction (1) for test context [DefaultTestContext@3ed03652 testClass = SysUserControllerTest, testInstance = com.wt.common.security.controller.SysUserControllerTest@4aedaf61, testMethod = findSysUserByUserId@SysUserControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@173797f0 testClass = SysUserControllerTest, locations = '{classpath:spring.xml, classpath:spring-mybatis.xml, classpath:spring-redis.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextCustomizers = set[org.springframework.test.context.web.socket.MockServerContainerContextCustomizer@4efbca5a], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.test.context.web.WebDelegatingSmartContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true]]; transaction manager [org.springframework.jdbc.datasource.DataSourceTransactionManager@3c35c345]; rollback [true]
2018-05-21 21:02:49,579  INFO MockServletContext:438 - Initializing Spring FrameworkServlet ''
2018-05-21 21:02:49,579  INFO TestDispatcherServlet:494 - FrameworkServlet '': initialization started
2018-05-21 21:02:49,624  INFO TestDispatcherServlet:513 - FrameworkServlet '': initialization completed in 45 ms
2018-05-21 21:02:49,629  INFO TransactionContext:137 - Rolled back transaction for test context [DefaultTestContext@3ed03652 testClass = SysUserControllerTest, testInstance = com.wt.common.security.controller.SysUserControllerTest@4aedaf61, testMethod = findSysUserByUserId@SysUserControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@173797f0 testClass = SysUserControllerTest, locations = '{classpath:spring.xml, classpath:spring-mybatis.xml, classpath:spring-redis.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextCustomizers = set[org.springframework.test.context.web.socket.MockServerContainerContextCustomizer@4efbca5a], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.test.context.web.WebDelegatingSmartContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true]].
2018-05-21 21:02:49,632  INFO TransactionContext:105 - Began transaction (1) for test context [DefaultTestContext@3ed03652 testClass = SysUserControllerTest, testInstance = com.wt.common.security.controller.SysUserControllerTest@58496c97, testMethod = create@SysUserControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@173797f0 testClass = SysUserControllerTest, locations = '{classpath:spring.xml, classpath:spring-mybatis.xml, classpath:spring-redis.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextCustomizers = set[org.springframework.test.context.web.socket.MockServerContainerContextCustomizer@4efbca5a], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.test.context.web.WebDelegatingSmartContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true]]; transaction manager [org.springframework.jdbc.datasource.DataSourceTransactionManager@3c35c345]; rollback [true]
2018-05-21 21:02:49,633  INFO MockServletContext:438 - Initializing Spring FrameworkServlet ''
2018-05-21 21:02:49,633  INFO TestDispatcherServlet:494 - FrameworkServlet '': initialization started
2018-05-21 21:02:49,635  INFO TestDispatcherServlet:513 - FrameworkServlet '': initialization completed in 1 ms
2018-05-21 21:02:49,820  INFO LoginInterceptor:63 - ⭐️{User-Agent:[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36],Protocol:[HTTP/1.1],Remote Addr:[127.0.0.1],Method:[POST],uri:[/sysUser/create],Cookie:[null],operator:[ceshi],parameters:[[{"password":"ceshi","account":"20180521210249","userName":"测试数据20180521210249","inUse":true,"mail":"test@aliyun.com"}]]}⭐️

MockHttpServletRequest:
      HTTP Method = POST
      Request URI = /sysUser/create
       Parameters = {}
          Headers = {Content-Type=[application/json;charset=UTF-8], Accept=[application/json;charset=UTF-8], User-Agent=[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36], X-Requested-With=[XMLHttpRequest]}
             Body = {"password":"ceshi","account":"20180521210249","userName":"测试数据20180521210249","inUse":true,"mail":"test@aliyun.com"}
    Session Attrs = {LOGINUSER=com.wt.common.security.model.SysUser@5292ceca}

Handler:
             Type = com.wt.common.security.controller.SysUserController
           Method = public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysUserController.create(com.wt.common.security.model.SysUser)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = {Content-Type=[application/json;charset=UTF-8]}
     Content type = application/json;charset=UTF-8
             Body = {"errorCode":"0","message":"SUCCESS","result":null}
    Forwarded URL = null
   Redirected URL = null
          Cookies = []
2018-05-21 21:02:49,907  INFO TransactionContext:137 - Rolled back transaction for test context [DefaultTestContext@3ed03652 testClass = SysUserControllerTest, testInstance = com.wt.common.security.controller.SysUserControllerTest@58496c97, testMethod = create@SysUserControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@173797f0 testClass = SysUserControllerTest, locations = '{classpath:spring.xml, classpath:spring-mybatis.xml, classpath:spring-redis.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextCustomizers = set[org.springframework.test.context.web.socket.MockServerContainerContextCustomizer@4efbca5a], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.test.context.web.WebDelegatingSmartContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true]].
2018-05-21 21:02:49,910  INFO TransactionContext:105 - Began transaction (1) for test context [DefaultTestContext@3ed03652 testClass = SysUserControllerTest, testInstance = com.wt.common.security.controller.SysUserControllerTest@62e93c3a, testMethod = update@SysUserControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@173797f0 testClass = SysUserControllerTest, locations = '{classpath:spring.xml, classpath:spring-mybatis.xml, classpath:spring-redis.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextCustomizers = set[org.springframework.test.context.web.socket.MockServerContainerContextCustomizer@4efbca5a], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.test.context.web.WebDelegatingSmartContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true]]; transaction manager [org.springframework.jdbc.datasource.DataSourceTransactionManager@3c35c345]; rollback [true]
2018-05-21 21:02:49,911  INFO MockServletContext:438 - Initializing Spring FrameworkServlet ''
2018-05-21 21:02:49,911  INFO TestDispatcherServlet:494 - FrameworkServlet '': initialization started
2018-05-21 21:02:49,913  INFO TestDispatcherServlet:513 - FrameworkServlet '': initialization completed in 1 ms
2018-05-21 21:02:49,938  INFO LoginInterceptor:63 - ⭐️{User-Agent:[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36],Protocol:[HTTP/1.1],Remote Addr:[127.0.0.1],Method:[PUT],uri:[/sysUser],Cookie:[null],operator:[ceshi],parameters:[[{"userId":"6057e4e4da6542f2bc32de5a43096dcd","password":"zBfDDNERxyFfyPUfh5Dg4Q\u003d\u003d","account":"20180521142248","userName":"20180521210249","inUse":true,"mail":"test@aliyun.com","creator":"099","changedBy":"099","lastUpdate":"2018-05-20","deleteFlag":false}]]}⭐️

MockHttpServletRequest:
      HTTP Method = PUT
      Request URI = /sysUser
       Parameters = {}
          Headers = {Content-Type=[application/json;charset=UTF-8], Accept=[application/json;charset=UTF-8], User-Agent=[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36], X-Requested-With=[XMLHttpRequest]}
             Body = {"userId":"6057e4e4da6542f2bc32de5a43096dcd","password":"zBfDDNERxyFfyPUfh5Dg4Q\u003d\u003d","account":"20180521142248","userName":"20180521210249","inUse":true,"mail":"test@aliyun.com","creator":"099","changedBy":"099","lastUpdate":"2018-05-20","deleteFlag":false}
    Session Attrs = {LOGINUSER=com.wt.common.security.model.SysUser@292158f8}

Handler:
             Type = com.wt.common.security.controller.SysUserController
           Method = public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysUserController.update(com.wt.common.security.model.SysUser)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = {Content-Type=[application/json;charset=UTF-8]}
     Content type = application/json;charset=UTF-8
             Body = {"errorCode":"0","message":"SUCCESS","result":null}
    Forwarded URL = null
   Redirected URL = null
          Cookies = []
2018-05-21 21:02:49,958  INFO TransactionContext:137 - Rolled back transaction for test context [DefaultTestContext@3ed03652 testClass = SysUserControllerTest, testInstance = com.wt.common.security.controller.SysUserControllerTest@62e93c3a, testMethod = update@SysUserControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@173797f0 testClass = SysUserControllerTest, locations = '{classpath:spring.xml, classpath:spring-mybatis.xml, classpath:spring-redis.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextCustomizers = set[org.springframework.test.context.web.socket.MockServerContainerContextCustomizer@4efbca5a], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.test.context.web.WebDelegatingSmartContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true]].
2018-05-21 21:02:49,962  INFO TransactionContext:105 - Began transaction (1) for test context [DefaultTestContext@3ed03652 testClass = SysUserControllerTest, testInstance = com.wt.common.security.controller.SysUserControllerTest@6944e53e, testMethod = removeUser@SysUserControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@173797f0 testClass = SysUserControllerTest, locations = '{classpath:spring.xml, classpath:spring-mybatis.xml, classpath:spring-redis.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextCustomizers = set[org.springframework.test.context.web.socket.MockServerContainerContextCustomizer@4efbca5a], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.test.context.web.WebDelegatingSmartContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true]]; transaction manager [org.springframework.jdbc.datasource.DataSourceTransactionManager@3c35c345]; rollback [true]
2018-05-21 21:02:49,962  INFO MockServletContext:438 - Initializing Spring FrameworkServlet ''
2018-05-21 21:02:49,963  INFO TestDispatcherServlet:494 - FrameworkServlet '': initialization started
2018-05-21 21:02:49,965  INFO TestDispatcherServlet:513 - FrameworkServlet '': initialization completed in 2 ms
2018-05-21 21:02:49,978  INFO LoginInterceptor:63 - ⭐️{User-Agent:[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36],Protocol:[HTTP/1.1],Remote Addr:[127.0.0.1],Method:[DELETE],uri:[/sysUser/6057e4e4da6542f2bc32de5a43096dcd],Cookie:[null],operator:[ceshi],parameters:[["6057e4e4da6542f2bc32de5a43096dcd"]]}⭐️

MockHttpServletRequest:
      HTTP Method = DELETE
      Request URI = /sysUser/6057e4e4da6542f2bc32de5a43096dcd
       Parameters = {}
          Headers = {Content-Type=[application/json;charset=UTF-8], Accept=[application/json;charset=UTF-8], User-Agent=[Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36], X-Requested-With=[XMLHttpRequest]}
             Body = null
    Session Attrs = {LOGINUSER=com.wt.common.security.model.SysUser@1e469dfd}

Handler:
             Type = com.wt.common.security.controller.SysUserController
           Method = public com.wt.common.core.result.HttpResultEntity<?> com.wt.common.security.controller.SysUserController.removeUser(java.lang.String)

Async:
    Async started = false
     Async result = null

Resolved Exception:
             Type = null

ModelAndView:
        View name = null
             View = null
            Model = null

FlashMap:
       Attributes = null

MockHttpServletResponse:
           Status = 200
    Error message = null
          Headers = {Content-Type=[application/json;charset=UTF-8]}
     Content type = application/json;charset=UTF-8
             Body = {"errorCode":"0","message":"SUCCESS","result":null}
    Forwarded URL = null
   Redirected URL = null
          Cookies = []
2018-05-21 21:02:49,994  INFO TransactionContext:137 - Rolled back transaction for test context [DefaultTestContext@3ed03652 testClass = SysUserControllerTest, testInstance = com.wt.common.security.controller.SysUserControllerTest@6944e53e, testMethod = removeUser@SysUserControllerTest, testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@173797f0 testClass = SysUserControllerTest, locations = '{classpath:spring.xml, classpath:spring-mybatis.xml, classpath:spring-redis.xml}', classes = '{}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{}', contextCustomizers = set[org.springframework.test.context.web.socket.MockServerContainerContextCustomizer@4efbca5a], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.test.context.web.WebDelegatingSmartContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.populatedRequestContextHolder' -> true, 'org.springframework.test.context.web.ServletTestExecutionListener.resetRequestContextHolder' -> true]].
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.295 sec
2018-05-21 21:02:49,998  INFO GenericWebApplicationContext:989 - Closing org.springframework.web.context.support.GenericWebApplicationContext@59af0466: startup date [Mon May 21 21:02:47 CST 2018]; root of context hierarchy
2018-05-21 21:02:50,007  INFO DruidDataSource:1823 - {dataSource-1} closed

Results :

Tests run: 5, Failures: 0, Errors: 0, Skipped: 1

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 6.527 s
[INFO] Finished at: 2018-05-21T21:02:50+08:00
[INFO] Final Memory: 16M/307M
[INFO] ------------------------------------------------------------------------

Process finished with exit code 0
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018-05-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
机器学习-12:MachineLN之优化算法
其实很多时候应该审视一下自己,知道自己的不足和长处,然后静下来去做一些事情,只有真正静下来才能深下去,只有深下去了才能有所突破,不要被别人的脚步带跑,无论什么时候专而精更重要,同时我也知自己的不足,有点狂、有点浮躁、坚持自己观点喜欢争论、说话有时候伤人等等,但是我的优点也正在此(下面是05年9月份写的《自己-社会-机器学习》的一篇文章,虽然有点浮躁,但是值得我再去回顾):感觉自己成长了不少,不再抱怨,不再发脾气,不再那么要强,不再看重别人的眼光,更加注重自己的评价,开始接受一些事情,棱角开始慢慢圆滑,但是我了解自己,是绝不会消失,有些东西决不能随波逐流,社会锻炼了我们,最终也会将越来越好的自己放到社会中实践,这是一个无限循环的事情,最后的结果就是社会和我们都将越来越好,这也是一个漫长的过程,也需要充足的空间给我们释放,这就要看你的程序的时间复杂度和空间复杂度,这个好了,过程就会快一点,其实想一下,很多时候,我们就是在找一个最优解,但是社会的进步估计我们永远找到的也只能是局部最优了吧,也就是说在某个时间段我们尽最大可能想到的最好决策,至于全局最优解,这个问题还真是个无人能解的问题吧,马克思列宁提的共产主义可能就是我们最想要的那个损失函数的最小值,但是怎么能找到那个最适合的权重呢,来达到全局最优,值得思考?我们可能要像梯度下降那样了,慢慢的来调节权重,达到某阶段的最优,当然大神们都有自己的方法,这点不能否认,但是弯路是要走的,不如把眼光放长远,让我们一起期待。
MachineLP
2022/05/09
4440
机器学习-12:MachineLN之优化算法
一文概览神经网络优化算法
机器学习的优化(目标),简单来说是:搜索模型的一组参数 w,它能显著地降低代价函数 J(w),该代价函数通常包括整个训练集上的性能评估(经验风险)和额外的正则化(结构风险)。与传统优化不同,它不是简单地根据数据的求解最优解,在大多数机器学习问题中,我们关注的是测试集(未知数据)上性能度量P的优化。
算法进阶
2022/06/02
1.2K0
一文概览神经网络优化算法
Adam优化算法「建议收藏」
深度学习常常需要大量的时间和计算机资源进行训练,这也是困扰深度学习算法开发的重大原因。虽然我们可以采用分布式并行训练加速模型的学习,但需要的计算资源并没有丝毫减少。而唯有需要资源更少、令模型收敛更快的最优化算法,才能从根本上加速机器的学习速度和效果,Adam算法正为此而生!
全栈程序员站长
2022/09/16
9170
最全的机器学习中的优化算法介绍
在机器学习中,有很多的问题并没有解析形式的解,或者有解析形式的解但是计算量很大(譬如,超定问题的最小二乘解),对于此类问题,通常我们会选择采用一种迭代的优化方式进行求解。
大数据技术与机器学习
2021/04/01
1.1K0
最全的机器学习中的优化算法介绍
深度学习最常用的学习算法:Adam优化算法
听说你了解深度学习最常用的学习算法:Adam优化算法?-深度学习世界。 深度学习常常需要大量的时间和机算资源进行训练,这也是困扰深度学习算法开发的重大原因。虽然我们可以采用分布式并行训练加速模型的学习,但所需的计算资源并没有丝毫减少。而唯有需要资源更少、令模型收敛更快的最优化算法,才能从根本上加速机器的学习速度和效果,Adam 算法正为此而生! Adam 优化算法是随机梯度下降算法的扩展式,近来其广泛用于深度学习应用中,尤其是计算机视觉和自然语言处理等任务。本文分为两部分,前一部分简要介绍了 Adam 优化
用户1332428
2018/03/09
10.4K0
深度学习最常用的学习算法:Adam优化算法
深度学习优化算法入门:二、动量、RMSProp、Adam
本系列的上一篇文章介绍了随机梯度下降,以及如何应对陷入局部极小值或鞍点的问题。在这篇文章中,我们将查看另一个困扰神经网络训练的问题,病态曲率。
zenRRan
2019/11/19
2.7K0
深度学习过程中的优化算法
神经网络的训练过程实质是得到最优化目标函数的过程,常见的目标函数MSE Loss、Cross Entropy Loss、NLL Loss等,网络训练过程就是最小化Loss的过程。Loss可以理解为模型预测值与真实值之间的差距。一般这些Loss函数是凸函数,可以使用最优化的相关算法最小化Loss,具体包括随机梯度下降、共轭梯度下降、牛顿法、拟牛顿法等。归功于神经网络的backward过程,使得梯度相关的搜索算法得以应用。下面简单介绍神经网络训练过程的几种优化方法。 一.基本算法 一阶优化算法 1.梯度下降 假
CodeInHand
2018/03/26
1.1K0
梯度下降优化算法概述
感谢阅读「美图数据技术团队」的第 11 篇原创文章,关注我们持续获取美图最新数据技术动态。
美图数据技术团队
2018/09/18
8290
梯度下降优化算法概述
算法金 | 再见!!!梯度下降(多图)
今天把达叔 6 脉神剑给佩奇了,上 吴恩达:机器学习的六个核心算法! ——梯度下降
算法金
2024/06/19
1130
算法金 | 再见!!!梯度下降(多图)
《deep learning》学习笔记(8)——深度模型中的优化
https://blog.csdn.net/u011239443/article/details/80046684
小爷毛毛_卓寿杰
2019/02/13
9840
《deep learning》学习笔记(8)——深度模型中的优化
机器学习中的最优化算法(全面总结)
对于几乎所有机器学习算法,无论是有监督学习、无监督学习,还是强化学习,最后一般都归结为求解最优化问题。因此,最优化方法在机器学习算法的推导与实现中占据中心地位。在这篇文章中,小编将对机器学习中所使用的优化算法做一个全面的总结,并理清它们直接的脉络关系,帮你从全局的高度来理解这一部分知识。
算法进阶
2023/08/28
7130
机器学习中的最优化算法(全面总结)
深度学习: 模型优化算法
随机梯度下降法、基于动量的随机梯度下降法 和 Nesterov型动量随机下降法 彼此性能相近; Adagrad法、Adadelta法、RMSProp法 和 Adam法 彼此性能相近。
JNingWei
2018/09/27
8370
【干货】机器学习最常用优化之一——梯度下降优化算法综述
【新智元导读】梯度下降算法是机器学习中使用非常广泛的优化算法,也是众多机器学习算法中最常用的优化方法。几乎当前每一个先进的(state-of-the-art)机器学习库或者深度学习库都会包括梯度下降算法的不同变种实现。但是,它们就像一个黑盒优化器,很难得到它们优缺点的实际解释。这篇文章旨在提供梯度下降算法中的不同变种的介绍,帮助使用者根据具体需要进行使用。 这篇文章首先介绍梯度下降算法的三种框架,然后介绍它们所存在的问题与挑战,接着介绍一些如何进行改进来解决这些问题,随后,介绍如何在并行环境中或者分布式环境
新智元
2018/03/26
1.9K0
【干货】机器学习最常用优化之一——梯度下降优化算法综述
机器学习中常用优化算法介绍
作者 | Walker 编辑 | 磐石 出品 | 磐创AI技术团队 【磐创AI导读】:本文主要介绍了常用的一些机器学习中常用的优化算法。想要学习更多的机器学习知识,欢迎大家点击上方蓝字关注我们的公众号:磐创AI。 在机器学习的世界中,通常我们会发现有很多问题并没有最优的解,或是要计算出最优的解要花费很大的计算量,面对这类问题一般的做法是利用迭代的思想尽可能的逼近问题的最优解。我们把解决此类优化问题的方法叫做优化算法,优化算法本质上是一种数学方法,常见的优化算法包括梯度下降法、牛顿法、Momentum, N
磐创AI
2018/07/20
9800
梯度下降法与优化算法
在机器学习和深度学习中,优化算法是训练模型的核心组成部分。优化算法用于调整模型的参数,以最小化损失函数,从而提高模型的预测准确性。梯度下降法(Gradient Descent)是最基本也是最常用的优化方法,但随着技术的发展,许多改进的优化算法应运而生,其中包括SGD(Stochastic Gradient Descent)、Adam等。本文将详细介绍梯度下降法及其变种,帮助你理解如何通过优化算法提升模型性能。
LucianaiB
2025/01/21
2690
各类的梯度优化
梯度下降是最流行的优化算法之一并且目前为止是优化神经网络最常见的算法。与此同时,每一个先进的深度学习库都包含各种算法实现的梯度下降(比如lasagne, caffe 和 keras的文档)。然而,这些算法经常作为黑盒优化程序使用,所以难以感受到各种算法的长处和不足。 本次分享旨在为您提供对不同梯度算法的直观感受,以期会帮助您更好地使用不同的梯度下降算法。首先,会罗列各种梯度下降算法的变种并简单地总结算法训练阶段的挑战。然后,会通过展示解决问题的动机和依据这些动机来推导更新法则,以介绍最常见的优化算法。本次也
计算机视觉研究院
2018/04/17
1.3K0
各类的梯度优化
机器学习 学习笔记(22) 深度模型中的优化
用于深度模型训练的优化算法与传统的优化算法在几个方面有所不同。机器学习通常是简接作用的,再打所述机器学习问题中,我们关注某些性能度量P,其定义于测试集上并且可能是不可解的。因此,我们只是间接地优化P,我们希望通过降低代价函数
2018/09/04
1.7K0
机器学习 学习笔记(22) 深度模型中的优化
【机器学习基础】 | 各种梯度下降优化算法回顾和总结
论文标题:An overview of gradient descent optimization algorithms 原文链接:https://arxiv.org/pdf/1609.04747.pdf Github:NLP相关Paper笔记和代码复现(https://github.com/DengBoCong/nlp-paper) 说明:阅读论文时进行相关思想、结构、优缺点,内容进行提炼和记录,论文和相关引用会标明出处,引用之处如有侵权,烦请告知删除。
统计学家
2021/10/11
1.6K0
深度|梯度下降优化算法综述
该文翻译自An overview of gradient descent optimization algorithms。 总所周知,梯度下降算法是机器学习中使用非常广泛的优化算法,也是众多机器学习算法中最常用的优化方法。几乎当前每一个先进的(state-of-the-art)机器学习库或者深度学习库都会包括梯度下降算法的不同变种实现。但是,它们就像一个黑盒优化器,很难得到它们优缺点的实际解释。 这篇文章旨在提供梯度下降算法中的不同变种的介绍,帮助使用者根据具体需要进行使用。 这篇文章首先介绍梯度下降算法的
智能算法
2018/04/02
7040
深度|梯度下降优化算法综述
机器学习中的最优化算法总结
对于几乎所有机器学习算法,无论是有监督学习、无监督学习,还是强化学习,最后一般都归结为求解最优化问题。因此,最优化方法在机器学习算法的推导与实现中占据中心地位。在这篇文章中,SIGAI将对机器学习中所使用的优化算法做一个全面的总结,并理清它们直接的脉络关系,帮你从全局的高度来理解这一部分知识。
SIGAI学习与实践平台
2018/08/24
6.6K0
机器学习中的最优化算法总结
相关推荐
机器学习-12:MachineLN之优化算法
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 1. 一些基本概念
    • 1.1 为什么要进行单元测试?我自己的理解是
    • 1.2 什么是Mock
    • 1.3对后台的测试粒度
  • 2. 添加依赖
  • 3. 一些注意事项
  • 4. 具体实现
  • 5. 具体结果
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档