springboot项目和普通的spring项目一样也可以做单元测试,一般是测试service层的方法,在进行项目构建的时候,需要在springboot默认依赖的基础上,再加上spring-boot-starter-test依赖,pom.xml文件如下所示:
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.5.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
</dependencies>
这里我们假定使用jpa操作数据库,然后我们需要定义实体类,编写dao层接口,service层接口。这里以User实体为例。
BaseEntity.java
package com.xxx.securitydemo.domain;
import java.util.Date;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.MappedSuperclass;
@MappedSuperclass
public class BaseEntity {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
protected Integer id;
protected Date modifyDate;
protected Date createDate;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Date getModifyDate() {
return modifyDate;
}
public void setModifyDate(Date modifyDate) {
this.modifyDate = modifyDate;
}
public Date getCreateDate() {
return createDate;
}
public void setCreateDate(Date createDate) {
this.createDate = createDate;
}
}
User.java
package com.xxx.securitydemo.domain;
import javax.persistence.Entity;
@Entity
public class User extends BaseEntity{
private String username;
private String password;
private String mobile;
private int age;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
配置类,本来这个示例是用来做springboot+security的,所以类名有些特殊意义,这里不妨碍使用,主要配置一个密码加密实体类,在单元测试类中会用到:
package com.xxx.securitydemo.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;
import org.springframework.security.crypto.password.PasswordEncoder;
@Configuration
public class SecurityConfig {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
UserDao.java
package com.xxx.securitydemo.dao;
import org.springframework.data.jpa.repository.JpaRepository;
import com.xxx.securitydemo.domain.User;
public interface UserDao extends JpaRepository<User,Integer>{
}
UserService.java
package com.xxx.securitydemo.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.xxx.securitydemo.dao.UserDao;
import com.xxx.securitydemo.domain.User;
@Service
public class UserService {
@Autowired
private UserDao userDao;
public User findById(Integer id) {
return userDao.findById(id).orElse(null);
}
public User save(User user) {
return userDao.save(user);
}
}
启动类 App.java
package com.xxx.securitydemo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class App {
public static void main( String[] args ){
SpringApplication.run(App.class, args);
}
}
application.yml
spring:
datasource:
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql:///huali?useUnicode=true&useSSL=false&characterEncoding=UTF-8
username: root
password: root
jpa:
hibernate:
ddl-auto: update
单元测试类 UserServiceTest.java
package com.xxx.securitydemo;
import static org.junit.Assert.assertEquals;
import java.util.Date;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.crypto.password.PasswordEncoder;
import org.springframework.test.context.junit4.SpringRunner;
import com.xxx.securitydemo.domain.User;
import com.xxx.securitydemo.service.UserService;
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserServiceTest {
@Autowired
private UserService userService;
@Autowired
private PasswordEncoder passwordEncoder;
@Test
public void insert() {
User user = new User();
user.setUsername("hadoop");
String password = passwordEncoder.encode("hadoop");
user.setPassword(password);
user.setAge(18);
user.setMobile("15011186301");
user.setCreateDate(new Date());
user.setModifyDate(new Date());
User result = userService.save(user);
assertEquals(result.getPassword(), password);
}
@Test
public void update() {
User user = userService.findById(1);
user.setCreateDate(new Date());
user.setModifyDate(new Date());
userService.save(user);
}
}
运行单元测试,鼠标点在单元测试类中的方法上,右键 Run As -> JUnit,控制台打印信息,没有报错的话,JUnit面板会显示绿条。
15:37:18.003 [main] DEBUG org.springframework.test.context.junit4.SpringJUnit4ClassRunner - SpringJUnit4ClassRunner constructor called with [class com.xxx.securitydemo.UserServiceTest]
15:37:18.008 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating CacheAwareContextLoaderDelegate from class [org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate]
15:37:18.015 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating BootstrapContext using constructor [public org.springframework.test.context.support.DefaultBootstrapContext(java.lang.Class,org.springframework.test.context.CacheAwareContextLoaderDelegate)]
15:37:18.031 [main] DEBUG org.springframework.test.context.BootstrapUtils - Instantiating TestContextBootstrapper for test class [com.xxx.securitydemo.UserServiceTest] from class [org.springframework.boot.test.context.SpringBootTestContextBootstrapper]
15:37:18.041 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Neither @ContextConfiguration nor @ContextHierarchy found for test class [com.xxx.securitydemo.UserServiceTest], using SpringBootContextLoader
15:37:18.043 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [com.xxx.securitydemo.UserServiceTest]: class path resource [com/xxx/securitydemo/UserServiceTest-context.xml] does not exist
15:37:18.044 [main] DEBUG org.springframework.test.context.support.AbstractContextLoader - Did not detect default resource location for test class [com.xxx.securitydemo.UserServiceTest]: class path resource [com/xxx/securitydemo/UserServiceTestContext.groovy] does not exist
15:37:18.044 [main] INFO org.springframework.test.context.support.AbstractContextLoader - Could not detect default resource locations for test class [com.xxx.securitydemo.UserServiceTest]: no resource found for suffixes {-context.xml, Context.groovy}.
15:37:18.044 [main] INFO org.springframework.test.context.support.AnnotationConfigContextLoaderUtils - Could not detect default configuration classes for test class [com.xxx.securitydemo.UserServiceTest]: UserServiceTest does not declare any static, non-private, non-final, nested classes annotated with @Configuration.
15:37:18.075 [main] DEBUG org.springframework.test.context.support.ActiveProfilesUtils - Could not find an 'annotation declaring class' for annotation type [org.springframework.test.context.ActiveProfiles] and class [com.xxx.securitydemo.UserServiceTest]
15:37:18.081 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
15:37:18.081 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
15:37:18.082 [main] DEBUG org.springframework.core.env.StandardEnvironment - Initialized StandardEnvironment with PropertySources [MapPropertySource@1773206895 {name='systemProperties', properties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=D:\Program Files\Java\jdk1.8.0_212\jre\bin, java.vm.version=25.212-b10, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=;, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user.country=CN, user.script=, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=, java.vm.specification.name=Java Virtual Machine Specification, user.dir=D:\workspace\securitydemo, java.runtime.version=1.8.0_212-b10, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.endorsed.dirs=D:\Program Files\Java\jdk1.8.0_212\jre\lib\endorsed, os.arch=amd64, java.io.tmpdir=C:\Users\ADMINI~1\AppData\Local\Temp\, line.separator=
, java.vm.specification.vendor=Oracle Corporation, user.variant=, os.name=Windows 10, sun.jnu.encoding=GBK, java.library.path=D:\Program Files\Java\jdk1.8.0_212\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:/Program Files/Java/jdk1.8.0_212/bin/../jre/bin/server;D:/Program Files/Java/jdk1.8.0_212/bin/../jre/bin;D:/Program Files/Java/jdk1.8.0_212/bin/../jre/lib/amd64;C:\Program Files (x86)\NetSarang\Xshell 6\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Program Files\Java\jdk1.8.0_212\bin;D:\Program Files\Java\jdk1.8.0_212\jre\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Git\cmd;C:\Program Files\TortoiseGit\bin;D:\feiy\tools\apache-maven-3.3.9\bin;D:\feiy\tools\node-v10.16.3-win-x64;E:\app\mongodb-win32-x86_64\bin;E:\app\mysql-5.7.27-winx64\bin;E:\app\redis-x64;D:\feiy\tools\curl-7.66.0-win64-mingw\bin;D:\feiy\tools\python\;D:\feiy\tools\python\Scripts\;E:\app\consul_windows;D:\feiy\tools\protoc-2.5.0-win32;D:\feiy\tools\dotnet-sdk-2.2.108-win-x64\;D:\MinGW\bin;C:\Users\Administrator\AppData\Local\GitHubDesktop\bin;C:\Users\Administrator\.dotnet\tools;E:\软件\eclipse_64\eclipse;;., java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, os.version=10.0, user.home=C:\Users\Administrator, user.timezone=Asia/Shanghai, java.awt.printerjob=sun.awt.windows.WPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, java.class.path=D:\Program Files\Java\jdk1.8.0_212\jre\lib\resources.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\rt.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\jce.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\jfr.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\access-bridge-64.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\cldrdata.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\dnsns.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\jaccess.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\jfxrt.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\localedata.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\nashorn.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\sunec.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\sunjce_provider.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\sunmscapi.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\sunpkcs11.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\zipfs.jar;D:\workspace\securitydemo\target\test-classes;D:\workspace\securitydemo\target\classes;D:\feiy\.m2\repository\junit\junit\4.12\junit-4.12.jar;D:\feiy\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.5.RELEASE\spring-boot-starter-web-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.5.RELEASE\spring-boot-starter-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot\2.0.5.RELEASE\spring-boot-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.5.RELEASE\spring-boot-autoconfigure-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.5.RELEASE\spring-boot-starter-logging-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\feiy\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\feiy\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;D:\feiy\.m2\repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;D:\feiy\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;D:\feiy\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;D:\feiy\.m2\repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.5.RELEASE\spring-boot-starter-json-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar;D:\feiy\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;D:\feiy\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.9.6\jackson-core-2.9.6.jar;D:\feiy\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.6\jackson-datatype-jdk8-2.9.6.jar;D:\feiy\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.6\jackson-datatype-jsr310-2.9.6.jar;D:\feiy\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.6\jackson-module-parameter-names-2.9.6.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.5.RELEASE\spring-boot-starter-tomcat-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.34\tomcat-embed-core-8.5.34.jar;D:\feiy\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.34\tomcat-embed-el-8.5.34.jar;D:\feiy\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.34\tomcat-embed-websocket-8.5.34.jar;D:\feiy\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.12.Final\hibernate-validator-6.0.12.Final.jar;D:\feiy\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;D:\feiy\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;D:\feiy\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;D:\feiy\.m2\repository\org\springframework\spring-web\5.0.9.RELEASE\spring-web-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-beans\5.0.9.RELEASE\spring-beans-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-webmvc\5.0.9.RELEASE\spring-webmvc-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-context\5.0.9.RELEASE\spring-context-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-expression\5.0.9.RELEASE\spring-expression-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.5.RELEASE\spring-boot-starter-data-jpa-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.5.RELEASE\spring-boot-starter-aop-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.5.RELEASE\spring-boot-starter-jdbc-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;D:\feiy\.m2\repository\org\springframework\spring-jdbc\5.0.9.RELEASE\spring-jdbc-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\javax\transaction\javax.transaction-api\1.2\javax.transaction-api-1.2.jar;D:\feiy\.m2\repository\org\hibernate\hibernate-core\5.2.17.Final\hibernate-core-5.2.17.Final.jar;D:\feiy\.m2\repository\org\hibernate\javax\persistence\hibernate-jpa-2.1-api\1.0.2.Final\hibernate-jpa-2.1-api-1.0.2.Final.jar;D:\feiy\.m2\repository\org\javassist\javassist\3.22.0-GA\javassist-3.22.0-GA.jar;D:\feiy\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;D:\feiy\.m2\repository\org\jboss\jandex\2.0.3.Final\jandex-2.0.3.Final.jar;D:\feiy\.m2\repository\dom4j\dom4j\1.6.1\dom4j-1.6.1.jar;D:\feiy\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.0.1.Final\hibernate-commons-annotations-5.0.1.Final.jar;D:\feiy\.m2\repository\org\springframework\data\spring-data-jpa\2.0.10.RELEASE\spring-data-jpa-2.0.10.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\data\spring-data-commons\2.0.10.RELEASE\spring-data-commons-2.0.10.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-orm\5.0.9.RELEASE\spring-orm-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-tx\5.0.9.RELEASE\spring-tx-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;D:\feiy\.m2\repository\org\springframework\spring-aspects\5.0.9.RELEASE\spring-aspects-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.5.RELEASE\spring-boot-starter-test-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-test\2.0.5.RELEASE\spring-boot-test-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.5.RELEASE\spring-boot-test-autoconfigure-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;D:\feiy\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;D:\feiy\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;D:\feiy\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;D:\feiy\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;D:\feiy\.m2\repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;D:\feiy\.m2\repository\net\bytebuddy\byte-buddy\1.7.11\byte-buddy-1.7.11.jar;D:\feiy\.m2\repository\net\bytebuddy\byte-buddy-agent\1.7.11\byte-buddy-agent-1.7.11.jar;D:\feiy\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;D:\feiy\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;D:\feiy\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;D:\feiy\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;D:\feiy\.m2\repository\org\springframework\spring-core\5.0.9.RELEASE\spring-core-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-jcl\5.0.9.RELEASE\spring-jcl-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-test\5.0.9.RELEASE\spring-test-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;D:\feiy\.m2\repository\mysql\mysql-connector-java\5.1.47\mysql-connector-java-5.1.47.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.5.RELEASE\spring-boot-starter-security-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-aop\5.0.9.RELEASE\spring-aop-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\security\spring-security-config\5.0.8.RELEASE\spring-security-config-5.0.8.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\security\spring-security-core\5.0.8.RELEASE\spring-security-core-5.0.8.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\security\spring-security-web\5.0.8.RELEASE\spring-security-web-5.0.8.RELEASE.jar;E:\软件\eclipse_64\eclipse\configuration\org.eclipse.osgi\413\0\.cp;E:\软件\eclipse_64\eclipse\configuration\org.eclipse.osgi\412\0\.cp, user.name=Administrator, java.vm.specification.version=1.8, sun.java.command=org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 62765 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader -loaderpluginname org.eclipse.jdt.junit4.runtime -test com.xxx.securitydemo.UserServiceTest:update, java.home=D:\Program Files\Java\jdk1.8.0_212\jre, sun.arch.data.model=64, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.windows.WToolkit, java.vm.info=mixed mode, java.version=1.8.0_212, java.ext.dirs=D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext;C:\Windows\Sun\Java\lib\ext, sun.boot.class.path=D:\Program Files\Java\jdk1.8.0_212\jre\lib\resources.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\rt.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\sunrsasign.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\jce.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\jfr.jar;D:\Program Files\Java\jdk1.8.0_212\jre\classes, java.vendor=Oracle Corporation, file.separator=\, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.desktop=windows, sun.cpu.isalist=amd64}}, SystemEnvironmentPropertySource@1970881185 {name='systemEnvironment', properties={USERDOMAIN_ROAMINGPROFILE=SC-201906201655, LOCALAPPDATA=C:\Users\Administrator\AppData\Local, PROCESSOR_LEVEL=6, USERDOMAIN=SC-201906201655, FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer, LOGONSERVER=\\SC-201906201655, JAVA_HOME=D:\Program Files\Java\jdk1.8.0_212, SESSIONNAME=Console, ALLUSERSPROFILE=C:\ProgramData, PROCESSOR_ARCHITECTURE=AMD64, PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\, SystemDrive=C:, APPDATA=C:\Users\Administrator\AppData\Roaming, USERNAME=Administrator, ProgramFiles(x86)=C:\Program Files (x86), CommonProgramFiles=C:\Program Files\Common Files, Path=D:/Program Files/Java/jdk1.8.0_212/bin/../jre/bin/server;D:/Program Files/Java/jdk1.8.0_212/bin/../jre/bin;D:/Program Files/Java/jdk1.8.0_212/bin/../jre/lib/amd64;C:\Program Files (x86)\NetSarang\Xshell 6\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Program Files\Java\jdk1.8.0_212\bin;D:\Program Files\Java\jdk1.8.0_212\jre\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Git\cmd;C:\Program Files\TortoiseGit\bin;D:\feiy\tools\apache-maven-3.3.9\bin;D:\feiy\tools\node-v10.16.3-win-x64;E:\app\mongodb-win32-x86_64\bin;E:\app\mysql-5.7.27-winx64\bin;E:\app\redis-x64;D:\feiy\tools\curl-7.66.0-win64-mingw\bin;D:\feiy\tools\python\;D:\feiy\tools\python\Scripts\;E:\app\consul_windows;D:\feiy\tools\protoc-2.5.0-win32;D:\feiy\tools\dotnet-sdk-2.2.108-win-x64\;D:\MinGW\bin;C:\Users\Administrator\AppData\Local\GitHubDesktop\bin;C:\Users\Administrator\.dotnet\tools;E:\软件\eclipse_64\eclipse;, FPS_BROWSER_USER_PROFILE_STRING=Default, PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC, OS=Windows_NT, COMPUTERNAME=SC-201906201655, PROCESSOR_REVISION=9e09, CommonProgramW6432=C:\Program Files\Common Files, ComSpec=C:\Windows\system32\cmd.exe, ProgramData=C:\ProgramData, ProgramW6432=C:\Program Files, DOTNET_ROOT=D:\feiy\tools\dotnet-sdk-2.2.108-win-x64, =D:=D:\, HOMEPATH=\Users\Administrator, SystemRoot=C:\Windows, TEMP=C:\Users\ADMINI~1\AppData\Local\Temp, HOMEDRIVE=C:, PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 158 Stepping 9, GenuineIntel, USERPROFILE=C:\Users\Administrator, TMP=C:\Users\ADMINI~1\AppData\Local\Temp, CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files, ProgramFiles=C:\Program Files, PUBLIC=C:\Users\Public, NUMBER_OF_PROCESSORS=4, windir=C:\Windows, =::=::\}}]
15:37:18.092 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Resolved classpath location [com/xxx/securitydemo/] to resources [URL [file:/D:/workspace/securitydemo/target/test-classes/com/xxx/securitydemo/], URL [file:/D:/workspace/securitydemo/target/classes/com/xxx/securitydemo/]]
15:37:18.093 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Looking for matching resources in directory tree [D:\workspace\securitydemo\target\test-classes\com\xxx\securitydemo]
15:37:18.093 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Searching directory [D:\workspace\securitydemo\target\test-classes\com\xxx\securitydemo] for files matching pattern [D:/workspace/securitydemo/target/test-classes/com/xxx/securitydemo/*.class]
15:37:18.095 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Looking for matching resources in directory tree [D:\workspace\securitydemo\target\classes\com\xxx\securitydemo]
15:37:18.096 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Searching directory [D:\workspace\securitydemo\target\classes\com\xxx\securitydemo] for files matching pattern [D:/workspace/securitydemo/target/classes/com/xxx/securitydemo/*.class]
15:37:18.098 [main] DEBUG org.springframework.core.io.support.PathMatchingResourcePatternResolver - Resolved location pattern [classpath*:com/xxx/securitydemo/*.class] to resources [file [D:\workspace\securitydemo\target\test-classes\com\xxx\securitydemo\UserServiceTest.class], file [D:\workspace\securitydemo\target\classes\com\xxx\securitydemo\App.class]]
15:37:18.138 [main] DEBUG org.springframework.context.annotation.ClassPathScanningCandidateComponentProvider - Identified candidate component class: file [D:\workspace\securitydemo\target\classes\com\xxx\securitydemo\App.class]
15:37:18.139 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Found @SpringBootConfiguration com.xxx.securitydemo.App for test class com.xxx.securitydemo.UserServiceTest
15:37:18.226 [main] DEBUG org.springframework.boot.test.context.SpringBootTestContextBootstrapper - @TestExecutionListeners is not present for class [com.xxx.securitydemo.UserServiceTest]: using defaults.
15:37:18.227 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Loaded default TestExecutionListener class names from location [META-INF/spring.factories]: [org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener, 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]
15:37:18.241 [main] INFO org.springframework.boot.test.context.SpringBootTestContextBootstrapper - Using TestExecutionListeners: [org.springframework.test.context.web.ServletTestExecutionListener@59309333, org.springframework.test.context.support.DirtiesContextBeforeModesTestExecutionListener@5876a9af, org.springframework.boot.test.mock.mockito.MockitoTestExecutionListener@7ec7ffd3, org.springframework.boot.test.autoconfigure.SpringBootDependencyInjectionTestExecutionListener@5b239d7d, org.springframework.test.context.support.DirtiesContextTestExecutionListener@6572421, org.springframework.test.context.transaction.TransactionalTestExecutionListener@6b81ce95, org.springframework.test.context.jdbc.SqlScriptsTestExecutionListener@2a798d51, org.springframework.boot.test.mock.mockito.ResetMocksTestExecutionListener@6d763516, org.springframework.boot.test.autoconfigure.restdocs.RestDocsTestExecutionListener@52bf72b5, org.springframework.boot.test.autoconfigure.web.client.MockRestServiceServerResetTestExecutionListener@37afeb11, org.springframework.boot.test.autoconfigure.web.servlet.MockMvcPrintOnlyOnFailureTestExecutionListener@515aebb0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverTestExecutionListener@dd8ba08]
15:37:18.242 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.xxx.securitydemo.UserServiceTest]
15:37:18.243 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.xxx.securitydemo.UserServiceTest]
15:37:18.244 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.xxx.securitydemo.UserServiceTest]
15:37:18.244 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.xxx.securitydemo.UserServiceTest]
15:37:18.252 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.xxx.securitydemo.UserServiceTest]
15:37:18.252 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.xxx.securitydemo.UserServiceTest]
15:37:18.253 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.xxx.securitydemo.UserServiceTest]
15:37:18.253 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.xxx.securitydemo.UserServiceTest]
15:37:18.254 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.xxx.securitydemo.UserServiceTest]
15:37:18.254 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.xxx.securitydemo.UserServiceTest]
15:37:18.257 [main] DEBUG org.springframework.test.context.support.AbstractDirtiesContextTestExecutionListener - Before test class: context [DefaultTestContext@72967906 testClass = UserServiceTest, testInstance = [null], testMethod = [null], testException = [null], mergedContextConfiguration = [WebMergedContextConfiguration@5b8dfcc1 testClass = UserServiceTest, locations = '{}', classes = '{class com.xxx.securitydemo.App}', contextInitializerClasses = '[]', activeProfiles = '{}', propertySourceLocations = '{}', propertySourceProperties = '{org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true}', contextCustomizers = set[org.springframework.boot.test.context.filter.ExcludeFilterContextCustomizer@2d8f65a4, org.springframework.boot.test.json.DuplicateJsonObjectContextCustomizerFactory$DuplicateJsonObjectContextCustomizer@59e5ddf, org.springframework.boot.test.mock.mockito.MockitoContextCustomizer@0, org.springframework.boot.test.web.client.TestRestTemplateContextCustomizer@69a3d1d, org.springframework.boot.test.autoconfigure.properties.PropertyMappingContextCustomizer@0, org.springframework.boot.test.autoconfigure.web.servlet.WebDriverContextCustomizerFactory$Customizer@3e57cd70], resourceBasePath = 'src/main/webapp', contextLoader = 'org.springframework.boot.test.context.SpringBootContextLoader', parent = [null]], attributes = map['org.springframework.test.context.web.ServletTestExecutionListener.activateListener' -> true]], class annotated with @DirtiesContext [false] with mode [null].
15:37:18.258 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved @ProfileValueSourceConfiguration [null] for test class [com.xxx.securitydemo.UserServiceTest]
15:37:18.258 [main] DEBUG org.springframework.test.annotation.ProfileValueUtils - Retrieved ProfileValueSource type [class org.springframework.test.annotation.SystemProfileValueSource] for class [com.xxx.securitydemo.UserServiceTest]
15:37:18.272 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemProperties' with lowest search precedence
15:37:18.272 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'systemEnvironment' with lowest search precedence
15:37:18.272 [main] DEBUG org.springframework.core.env.StandardEnvironment - Initialized StandardEnvironment with PropertySources [MapPropertySource@1976870338 {name='systemProperties', properties={java.runtime.name=Java(TM) SE Runtime Environment, sun.boot.library.path=D:\Program Files\Java\jdk1.8.0_212\jre\bin, java.vm.version=25.212-b10, java.vm.vendor=Oracle Corporation, java.vendor.url=http://java.oracle.com/, path.separator=;, java.vm.name=Java HotSpot(TM) 64-Bit Server VM, file.encoding.pkg=sun.io, user.country=CN, user.script=, sun.java.launcher=SUN_STANDARD, sun.os.patch.level=, java.vm.specification.name=Java Virtual Machine Specification, user.dir=D:\workspace\securitydemo, java.runtime.version=1.8.0_212-b10, java.awt.graphicsenv=sun.awt.Win32GraphicsEnvironment, java.endorsed.dirs=D:\Program Files\Java\jdk1.8.0_212\jre\lib\endorsed, os.arch=amd64, java.io.tmpdir=C:\Users\ADMINI~1\AppData\Local\Temp\, line.separator=
, java.vm.specification.vendor=Oracle Corporation, user.variant=, os.name=Windows 10, sun.jnu.encoding=GBK, java.library.path=D:\Program Files\Java\jdk1.8.0_212\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;D:/Program Files/Java/jdk1.8.0_212/bin/../jre/bin/server;D:/Program Files/Java/jdk1.8.0_212/bin/../jre/bin;D:/Program Files/Java/jdk1.8.0_212/bin/../jre/lib/amd64;C:\Program Files (x86)\NetSarang\Xshell 6\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Program Files\Java\jdk1.8.0_212\bin;D:\Program Files\Java\jdk1.8.0_212\jre\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Git\cmd;C:\Program Files\TortoiseGit\bin;D:\feiy\tools\apache-maven-3.3.9\bin;D:\feiy\tools\node-v10.16.3-win-x64;E:\app\mongodb-win32-x86_64\bin;E:\app\mysql-5.7.27-winx64\bin;E:\app\redis-x64;D:\feiy\tools\curl-7.66.0-win64-mingw\bin;D:\feiy\tools\python\;D:\feiy\tools\python\Scripts\;E:\app\consul_windows;D:\feiy\tools\protoc-2.5.0-win32;D:\feiy\tools\dotnet-sdk-2.2.108-win-x64\;D:\MinGW\bin;C:\Users\Administrator\AppData\Local\GitHubDesktop\bin;C:\Users\Administrator\.dotnet\tools;E:\软件\eclipse_64\eclipse;;., java.specification.name=Java Platform API Specification, java.class.version=52.0, sun.management.compiler=HotSpot 64-Bit Tiered Compilers, os.version=10.0, user.home=C:\Users\Administrator, user.timezone=Asia/Shanghai, java.awt.printerjob=sun.awt.windows.WPrinterJob, file.encoding=UTF-8, java.specification.version=1.8, java.class.path=D:\Program Files\Java\jdk1.8.0_212\jre\lib\resources.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\rt.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\jce.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\jfr.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\access-bridge-64.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\cldrdata.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\dnsns.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\jaccess.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\jfxrt.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\localedata.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\nashorn.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\sunec.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\sunjce_provider.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\sunmscapi.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\sunpkcs11.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext\zipfs.jar;D:\workspace\securitydemo\target\test-classes;D:\workspace\securitydemo\target\classes;D:\feiy\.m2\repository\junit\junit\4.12\junit-4.12.jar;D:\feiy\.m2\repository\org\hamcrest\hamcrest-core\1.3\hamcrest-core-1.3.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-web\2.0.5.RELEASE\spring-boot-starter-web-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter\2.0.5.RELEASE\spring-boot-starter-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot\2.0.5.RELEASE\spring-boot-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-autoconfigure\2.0.5.RELEASE\spring-boot-autoconfigure-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-logging\2.0.5.RELEASE\spring-boot-starter-logging-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\ch\qos\logback\logback-classic\1.2.3\logback-classic-1.2.3.jar;D:\feiy\.m2\repository\ch\qos\logback\logback-core\1.2.3\logback-core-1.2.3.jar;D:\feiy\.m2\repository\org\apache\logging\log4j\log4j-to-slf4j\2.10.0\log4j-to-slf4j-2.10.0.jar;D:\feiy\.m2\repository\org\apache\logging\log4j\log4j-api\2.10.0\log4j-api-2.10.0.jar;D:\feiy\.m2\repository\org\slf4j\jul-to-slf4j\1.7.25\jul-to-slf4j-1.7.25.jar;D:\feiy\.m2\repository\javax\annotation\javax.annotation-api\1.3.2\javax.annotation-api-1.3.2.jar;D:\feiy\.m2\repository\org\yaml\snakeyaml\1.19\snakeyaml-1.19.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-json\2.0.5.RELEASE\spring-boot-starter-json-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\com\fasterxml\jackson\core\jackson-databind\2.9.6\jackson-databind-2.9.6.jar;D:\feiy\.m2\repository\com\fasterxml\jackson\core\jackson-annotations\2.9.0\jackson-annotations-2.9.0.jar;D:\feiy\.m2\repository\com\fasterxml\jackson\core\jackson-core\2.9.6\jackson-core-2.9.6.jar;D:\feiy\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jdk8\2.9.6\jackson-datatype-jdk8-2.9.6.jar;D:\feiy\.m2\repository\com\fasterxml\jackson\datatype\jackson-datatype-jsr310\2.9.6\jackson-datatype-jsr310-2.9.6.jar;D:\feiy\.m2\repository\com\fasterxml\jackson\module\jackson-module-parameter-names\2.9.6\jackson-module-parameter-names-2.9.6.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-tomcat\2.0.5.RELEASE\spring-boot-starter-tomcat-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\apache\tomcat\embed\tomcat-embed-core\8.5.34\tomcat-embed-core-8.5.34.jar;D:\feiy\.m2\repository\org\apache\tomcat\embed\tomcat-embed-el\8.5.34\tomcat-embed-el-8.5.34.jar;D:\feiy\.m2\repository\org\apache\tomcat\embed\tomcat-embed-websocket\8.5.34\tomcat-embed-websocket-8.5.34.jar;D:\feiy\.m2\repository\org\hibernate\validator\hibernate-validator\6.0.12.Final\hibernate-validator-6.0.12.Final.jar;D:\feiy\.m2\repository\javax\validation\validation-api\2.0.1.Final\validation-api-2.0.1.Final.jar;D:\feiy\.m2\repository\org\jboss\logging\jboss-logging\3.3.2.Final\jboss-logging-3.3.2.Final.jar;D:\feiy\.m2\repository\com\fasterxml\classmate\1.3.4\classmate-1.3.4.jar;D:\feiy\.m2\repository\org\springframework\spring-web\5.0.9.RELEASE\spring-web-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-beans\5.0.9.RELEASE\spring-beans-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-webmvc\5.0.9.RELEASE\spring-webmvc-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-context\5.0.9.RELEASE\spring-context-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-expression\5.0.9.RELEASE\spring-expression-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-data-jpa\2.0.5.RELEASE\spring-boot-starter-data-jpa-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-aop\2.0.5.RELEASE\spring-boot-starter-aop-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\aspectj\aspectjweaver\1.8.13\aspectjweaver-1.8.13.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-jdbc\2.0.5.RELEASE\spring-boot-starter-jdbc-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\com\zaxxer\HikariCP\2.7.9\HikariCP-2.7.9.jar;D:\feiy\.m2\repository\org\springframework\spring-jdbc\5.0.9.RELEASE\spring-jdbc-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\javax\transaction\javax.transaction-api\1.2\javax.transaction-api-1.2.jar;D:\feiy\.m2\repository\org\hibernate\hibernate-core\5.2.17.Final\hibernate-core-5.2.17.Final.jar;D:\feiy\.m2\repository\org\hibernate\javax\persistence\hibernate-jpa-2.1-api\1.0.2.Final\hibernate-jpa-2.1-api-1.0.2.Final.jar;D:\feiy\.m2\repository\org\javassist\javassist\3.22.0-GA\javassist-3.22.0-GA.jar;D:\feiy\.m2\repository\antlr\antlr\2.7.7\antlr-2.7.7.jar;D:\feiy\.m2\repository\org\jboss\jandex\2.0.3.Final\jandex-2.0.3.Final.jar;D:\feiy\.m2\repository\dom4j\dom4j\1.6.1\dom4j-1.6.1.jar;D:\feiy\.m2\repository\org\hibernate\common\hibernate-commons-annotations\5.0.1.Final\hibernate-commons-annotations-5.0.1.Final.jar;D:\feiy\.m2\repository\org\springframework\data\spring-data-jpa\2.0.10.RELEASE\spring-data-jpa-2.0.10.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\data\spring-data-commons\2.0.10.RELEASE\spring-data-commons-2.0.10.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-orm\5.0.9.RELEASE\spring-orm-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-tx\5.0.9.RELEASE\spring-tx-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\slf4j\slf4j-api\1.7.25\slf4j-api-1.7.25.jar;D:\feiy\.m2\repository\org\springframework\spring-aspects\5.0.9.RELEASE\spring-aspects-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-test\2.0.5.RELEASE\spring-boot-starter-test-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-test\2.0.5.RELEASE\spring-boot-test-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-test-autoconfigure\2.0.5.RELEASE\spring-boot-test-autoconfigure-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\com\jayway\jsonpath\json-path\2.4.0\json-path-2.4.0.jar;D:\feiy\.m2\repository\net\minidev\json-smart\2.3\json-smart-2.3.jar;D:\feiy\.m2\repository\net\minidev\accessors-smart\1.2\accessors-smart-1.2.jar;D:\feiy\.m2\repository\org\ow2\asm\asm\5.0.4\asm-5.0.4.jar;D:\feiy\.m2\repository\org\assertj\assertj-core\3.9.1\assertj-core-3.9.1.jar;D:\feiy\.m2\repository\org\mockito\mockito-core\2.15.0\mockito-core-2.15.0.jar;D:\feiy\.m2\repository\net\bytebuddy\byte-buddy\1.7.11\byte-buddy-1.7.11.jar;D:\feiy\.m2\repository\net\bytebuddy\byte-buddy-agent\1.7.11\byte-buddy-agent-1.7.11.jar;D:\feiy\.m2\repository\org\objenesis\objenesis\2.6\objenesis-2.6.jar;D:\feiy\.m2\repository\org\hamcrest\hamcrest-library\1.3\hamcrest-library-1.3.jar;D:\feiy\.m2\repository\org\skyscreamer\jsonassert\1.5.0\jsonassert-1.5.0.jar;D:\feiy\.m2\repository\com\vaadin\external\google\android-json\0.0.20131108.vaadin1\android-json-0.0.20131108.vaadin1.jar;D:\feiy\.m2\repository\org\springframework\spring-core\5.0.9.RELEASE\spring-core-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-jcl\5.0.9.RELEASE\spring-jcl-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-test\5.0.9.RELEASE\spring-test-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\xmlunit\xmlunit-core\2.5.1\xmlunit-core-2.5.1.jar;D:\feiy\.m2\repository\mysql\mysql-connector-java\5.1.47\mysql-connector-java-5.1.47.jar;D:\feiy\.m2\repository\org\springframework\boot\spring-boot-starter-security\2.0.5.RELEASE\spring-boot-starter-security-2.0.5.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\spring-aop\5.0.9.RELEASE\spring-aop-5.0.9.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\security\spring-security-config\5.0.8.RELEASE\spring-security-config-5.0.8.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\security\spring-security-core\5.0.8.RELEASE\spring-security-core-5.0.8.RELEASE.jar;D:\feiy\.m2\repository\org\springframework\security\spring-security-web\5.0.8.RELEASE\spring-security-web-5.0.8.RELEASE.jar;E:\软件\eclipse_64\eclipse\configuration\org.eclipse.osgi\413\0\.cp;E:\软件\eclipse_64\eclipse\configuration\org.eclipse.osgi\412\0\.cp, user.name=Administrator, java.vm.specification.version=1.8, sun.java.command=org.eclipse.jdt.internal.junit.runner.RemoteTestRunner -version 3 -port 62765 -testLoaderClass org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader -loaderpluginname org.eclipse.jdt.junit4.runtime -test com.xxx.securitydemo.UserServiceTest:update, java.home=D:\Program Files\Java\jdk1.8.0_212\jre, sun.arch.data.model=64, user.language=zh, java.specification.vendor=Oracle Corporation, awt.toolkit=sun.awt.windows.WToolkit, java.vm.info=mixed mode, java.version=1.8.0_212, java.ext.dirs=D:\Program Files\Java\jdk1.8.0_212\jre\lib\ext;C:\Windows\Sun\Java\lib\ext, sun.boot.class.path=D:\Program Files\Java\jdk1.8.0_212\jre\lib\resources.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\rt.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\sunrsasign.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\jsse.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\jce.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\charsets.jar;D:\Program Files\Java\jdk1.8.0_212\jre\lib\jfr.jar;D:\Program Files\Java\jdk1.8.0_212\jre\classes, java.vendor=Oracle Corporation, file.separator=\, java.vendor.url.bug=http://bugreport.sun.com/bugreport/, sun.io.unicode.encoding=UnicodeLittle, sun.cpu.endian=little, sun.desktop=windows, sun.cpu.isalist=amd64}}, SystemEnvironmentPropertySource@1434234664 {name='systemEnvironment', properties={USERDOMAIN_ROAMINGPROFILE=SC-201906201655, LOCALAPPDATA=C:\Users\Administrator\AppData\Local, PROCESSOR_LEVEL=6, USERDOMAIN=SC-201906201655, FPS_BROWSER_APP_PROFILE_STRING=Internet Explorer, LOGONSERVER=\\SC-201906201655, JAVA_HOME=D:\Program Files\Java\jdk1.8.0_212, SESSIONNAME=Console, ALLUSERSPROFILE=C:\ProgramData, PROCESSOR_ARCHITECTURE=AMD64, PSModulePath=C:\Windows\system32\WindowsPowerShell\v1.0\Modules\, SystemDrive=C:, APPDATA=C:\Users\Administrator\AppData\Roaming, USERNAME=Administrator, ProgramFiles(x86)=C:\Program Files (x86), CommonProgramFiles=C:\Program Files\Common Files, Path=D:/Program Files/Java/jdk1.8.0_212/bin/../jre/bin/server;D:/Program Files/Java/jdk1.8.0_212/bin/../jre/bin;D:/Program Files/Java/jdk1.8.0_212/bin/../jre/lib/amd64;C:\Program Files (x86)\NetSarang\Xshell 6\;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Program Files\Java\jdk1.8.0_212\bin;D:\Program Files\Java\jdk1.8.0_212\jre\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Git\cmd;C:\Program Files\TortoiseGit\bin;D:\feiy\tools\apache-maven-3.3.9\bin;D:\feiy\tools\node-v10.16.3-win-x64;E:\app\mongodb-win32-x86_64\bin;E:\app\mysql-5.7.27-winx64\bin;E:\app\redis-x64;D:\feiy\tools\curl-7.66.0-win64-mingw\bin;D:\feiy\tools\python\;D:\feiy\tools\python\Scripts\;E:\app\consul_windows;D:\feiy\tools\protoc-2.5.0-win32;D:\feiy\tools\dotnet-sdk-2.2.108-win-x64\;D:\MinGW\bin;C:\Users\Administrator\AppData\Local\GitHubDesktop\bin;C:\Users\Administrator\.dotnet\tools;E:\软件\eclipse_64\eclipse;, FPS_BROWSER_USER_PROFILE_STRING=Default, PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH;.MSC, OS=Windows_NT, COMPUTERNAME=SC-201906201655, PROCESSOR_REVISION=9e09, CommonProgramW6432=C:\Program Files\Common Files, ComSpec=C:\Windows\system32\cmd.exe, ProgramData=C:\ProgramData, ProgramW6432=C:\Program Files, DOTNET_ROOT=D:\feiy\tools\dotnet-sdk-2.2.108-win-x64, =D:=D:\, HOMEPATH=\Users\Administrator, SystemRoot=C:\Windows, TEMP=C:\Users\ADMINI~1\AppData\Local\Temp, HOMEDRIVE=C:, PROCESSOR_IDENTIFIER=Intel64 Family 6 Model 158 Stepping 9, GenuineIntel, USERPROFILE=C:\Users\Administrator, TMP=C:\Users\ADMINI~1\AppData\Local\Temp, CommonProgramFiles(x86)=C:\Program Files (x86)\Common Files, ProgramFiles=C:\Program Files, PUBLIC=C:\Users\Public, NUMBER_OF_PROCESSORS=4, windir=C:\Windows, =::=::\}}]
15:37:18.274 [main] DEBUG org.springframework.test.context.support.TestPropertySourceUtils - Adding inlined properties to environment: {spring.jmx.enabled=false, org.springframework.boot.test.context.SpringBootTestContextBootstrapper=true, server.port=-1}
15:37:18.274 [main] DEBUG org.springframework.core.env.StandardEnvironment - Adding PropertySource 'Inlined Test Properties' with highest search precedence
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.5.RELEASE)
2019-10-25 15:37:18.596 INFO 5564 --- [ main] com.xxx.securitydemo.UserServiceTest : Starting UserServiceTest on SC-201906201655 with PID 5564 (started by Administrator in D:\workspace\securitydemo)
2019-10-25 15:37:18.597 INFO 5564 --- [ main] com.xxx.securitydemo.UserServiceTest : The following profiles are active: dev
2019-10-25 15:37:18.628 INFO 5564 --- [ main] o.s.w.c.s.GenericWebApplicationContext : Refreshing org.springframework.web.context.support.GenericWebApplicationContext@7139992f: startup date [Fri Oct 25 15:37:18 CST 2019]; root of context hierarchy
2019-10-25 15:37:19.737 INFO 5564 --- [ main] trationDelegate$BeanPostProcessorChecker : Bean 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration' of type [org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration$$EnhancerBySpringCGLIB$$d2593a5] is not eligible for getting processed by all BeanPostProcessors (for example: not eligible for auto-proxying)
2019-10-25 15:37:19.902 INFO 5564 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
2019-10-25 15:37:20.089 INFO 5564 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Start completed.
2019-10-25 15:37:20.122 INFO 5564 --- [ main] j.LocalContainerEntityManagerFactoryBean : Building JPA container EntityManagerFactory for persistence unit 'default'
2019-10-25 15:37:20.196 INFO 5564 --- [ main] o.hibernate.jpa.internal.util.LogHelper : HHH000204: Processing PersistenceUnitInfo [
name: default
...]
2019-10-25 15:37:20.270 INFO 5564 --- [ main] org.hibernate.Version : HHH000412: Hibernate Core {5.2.17.Final}
2019-10-25 15:37:20.272 INFO 5564 --- [ main] org.hibernate.cfg.Environment : HHH000206: hibernate.properties not found
2019-10-25 15:37:20.304 INFO 5564 --- [ main] o.hibernate.annotations.common.Version : HCANN000001: Hibernate Commons Annotations {5.0.1.Final}
2019-10-25 15:37:20.401 INFO 5564 --- [ main] org.hibernate.dialect.Dialect : HHH000400: Using dialect: org.hibernate.dialect.MySQL5Dialect
2019-10-25 15:37:20.826 INFO 5564 --- [ main] j.LocalContainerEntityManagerFactoryBean : Initialized JPA EntityManagerFactory for persistence unit 'default'
2019-10-25 15:37:21.270 INFO 5564 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**/favicon.ico] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2019-10-25 15:37:21.512 INFO 5564 --- [ main] s.w.s.m.m.a.RequestMappingHandlerAdapter : Looking for @ControllerAdvice: org.springframework.web.context.support.GenericWebApplicationContext@7139992f: startup date [Fri Oct 25 15:37:18 CST 2019]; root of context hierarchy
2019-10-25 15:37:21.548 WARN 5564 --- [ main] aWebConfiguration$JpaWebMvcConfiguration : spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explicitly configure spring.jpa.open-in-view to disable this warning
2019-10-25 15:37:21.579 INFO 5564 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error]}" onto public org.springframework.http.ResponseEntity<java.util.Map<java.lang.String, java.lang.Object>> org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.error(javax.servlet.http.HttpServletRequest)
2019-10-25 15:37:21.580 INFO 5564 --- [ main] s.w.s.m.m.a.RequestMappingHandlerMapping : Mapped "{[/error],produces=[text/html]}" onto public org.springframework.web.servlet.ModelAndView org.springframework.boot.autoconfigure.web.servlet.error.BasicErrorController.errorHtml(javax.servlet.http.HttpServletRequest,javax.servlet.http.HttpServletResponse)
2019-10-25 15:37:21.609 INFO 5564 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/webjars/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2019-10-25 15:37:21.610 INFO 5564 --- [ main] o.s.w.s.handler.SimpleUrlHandlerMapping : Mapped URL path [/**] onto handler of type [class org.springframework.web.servlet.resource.ResourceHttpRequestHandler]
2019-10-25 15:37:21.894 INFO 5564 --- [ main] .s.s.UserDetailsServiceAutoConfiguration :
Using generated security password: 6b0567be-ca60-4ca2-a5e7-de9c1ce4befe
2019-10-25 15:37:22.047 INFO 5564 --- [ main] o.s.s.web.DefaultSecurityFilterChain : Creating filter chain: org.springframework.security.web.util.matcher.AnyRequestMatcher@1, [org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter@150fc7a7, org.springframework.security.web.context.SecurityContextPersistenceFilter@1fe8f5e8, org.springframework.security.web.header.HeaderWriterFilter@7b297740, org.springframework.security.web.csrf.CsrfFilter@25a5c8e, org.springframework.security.web.authentication.logout.LogoutFilter@7761e342, org.springframework.security.web.authentication.UsernamePasswordAuthenticationFilter@aa1bb14, org.springframework.security.web.authentication.ui.DefaultLoginPageGeneratingFilter@47058864, org.springframework.security.web.authentication.www.BasicAuthenticationFilter@53982523, org.springframework.security.web.savedrequest.RequestCacheAwareFilter@6e3dd5ce, org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter@ef86c72, org.springframework.security.web.authentication.AnonymousAuthenticationFilter@55d8c2c4, org.springframework.security.web.session.SessionManagementFilter@57ce2898, org.springframework.security.web.access.ExceptionTranslationFilter@1c7f9861, org.springframework.security.web.access.intercept.FilterSecurityInterceptor@4703c998]
2019-10-25 15:37:22.145 INFO 5564 --- [ main] com.xxx.securitydemo.UserServiceTest : Started UserServiceTest in 3.864 seconds (JVM running for 4.567)
2019-10-25 15:37:22.301 INFO 5564 --- [ Thread-2] o.s.w.c.s.GenericWebApplicationContext : Closing org.springframework.web.context.support.GenericWebApplicationContext@7139992f: startup date [Fri Oct 25 15:37:18 CST 2019]; root of context hierarchy
2019-10-25 15:37:22.305 INFO 5564 --- [ Thread-2] j.LocalContainerEntityManagerFactoryBean : Closing JPA EntityManagerFactory for persistence unit 'default'
2019-10-25 15:37:22.305 INFO 5564 --- [ Thread-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
2019-10-25 15:37:22.310 INFO 5564 --- [ Thread-2] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown completed.
从打印信息看,springboot的单元测试,实际上是启动了项目启动类,加载了系统配置,以及做了一些对象实例化和依赖注入操作,最后执行了单元测试方法。springboot与spring的单元测试不太一样,spring的单元测试无需也无法配置一个启动类,但是需要指定spring的配置文件spring.xml或者applicationContext.xml,如果有多个配置文件,需要都加入到@ContextConfiguration配置当中去。
spring的单元测试是需要在类上添加注解@RunWith(SpringJUnit4ClassRunner.class),在springboot的单元测试里,同样需要这个注解,但是springboot提供了另外一种方式:@RunWith(SpringRunner.class),从单元测试打印信息来看,实际还是调用了SpringJUnit4ClassRunner.class。
springboot单元测试总体来说,配置是简单了,无需关心配置文件,因为会使用默认的配置文件,但是实际上运行更复杂了,它做一次单元测试,相当于启动了一次整个项目,感觉比以前更耗时了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)