好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

SpringBoot使用@SpringBootTest注解开发单元测试教程

概述

@SpringBootTest注解是SpringBoot自1.4.0版本开始引入的一个用于测试的注解。基本用法如下:

1.添加依赖:

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

< project xmlns = "http://maven.apache.org/POM/4.0.0" xmlns:xsi = "http://HdhCmsTestw3.org/2001/XMLSchema-instance" xsi:schemaLocation = "http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" >

   < modelVersion >4.0.0</ modelVersion >

   < groupId >com.cxh.test</ groupId >

   < artifactId >generator</ artifactId >

   < version >0.0.1-SNAPSHOT</ version >

  

  < parent >

         < groupId >org.springframework.boot</ groupId >

         < artifactId >spring-boot-starter-parent</ artifactId >

         < version >1.5.1.RELEASE</ version >

         < relativePath /> <!-- lookup parent from repository -->

     </ parent >

 

     < properties >

         < project.build.sourceEncoding >UTF-8</ project.build.sourceEncoding >

         < project.reporting.outputEncoding >UTF-8</ project.reporting.outputEncoding >

         < java.version >1.8</ java.version >

     </ properties >

  

   < dependencies >

 

          <!-- spring boot web 依赖 -->

         < dependency >

             < groupId >org.springframework.boot</ groupId >

             < artifactId >spring-boot-starter-web</ artifactId >

         </ dependency >

         < dependency >

             < groupId >org.springframework.boot</ groupId >

             < artifactId >spring-boot-starter-test</ artifactId >

         </ dependency >

         <!-- 修改后立即生效,热部署 -->

         < dependency >

             < groupId >org.springframework</ groupId >

             < artifactId >springloaded</ artifactId >

         </ dependency >

         < dependency >

             < groupId >org.springframework.boot</ groupId >

             < artifactId >spring-boot-devtools</ artifactId >

         </ dependency >

         <!-- 视图 -->

         < dependency >

             < groupId >org.springframework.boot</ groupId >

             < artifactId >spring-boot-starter-thymeleaf</ artifactId >

         </ dependency >

        

          <!-- mybatis 依赖 -->

         < dependency >

             < groupId >org.mybatis.spring.boot</ groupId >

             < artifactId >mybatis-spring-boot-starter</ artifactId >

             < version >1.3.0</ version >

         </ dependency >

         <!-- mysql 依赖 -->

         < dependency >

             < groupId >mysql</ groupId >

             < artifactId >mysql-connector-java</ artifactId >

             < version >5.0.4</ version >

         </ dependency >

         <!-- alibaba的druid数据库连接池 -->

         < dependency >

             < groupId >com.alibaba</ groupId >

             < artifactId >druid-spring-boot-starter</ artifactId >

             < version >1.1.9</ version >

         </ dependency >

 

        

     </ dependencies >

   < dependencyManagement >

         < dependencies >

             < dependency >

                 < groupId >org.springframework.cloud</ groupId >

                 < artifactId >spring-cloud-dependencies</ artifactId >

                 < version >Camden.SR6</ version >

                 < type >pom</ type >

                 < scope >import</ scope >

             </ dependency >

         </ dependencies >

     </ dependencyManagement >

   < build />

</ project >

2. 编写启动入口类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

package com.cxh.study.platform;

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

 

/**

  *

  * @desciption

  * @author ChenXiHua

  *

  */

@SpringBootApplication

public class GeneratorApp {

 

     /**

      * @param args

      */

     public static void main(String[] args) {

         SpringApplication.run(GeneratorApp. class , args);

     }

 

}

3. 编写Controller类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

package com.cxh.study.platform;

 

import org.springframework.boot.SpringApplication;

import org.springframework.boot.autoconfigure.SpringBootApplication;

 

/**

  *

  * @desciption

  * @author ChenXiHua

  *

  */

@SpringBootApplication

public class GeneratorApp {

 

     /**

      * @param args

      */

     public static void main(String[] args) {

         SpringApplication.run(GeneratorApp. class , args);

     }

 

}

4. 编写service类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

package com.cxh.study.platform.service;

 

import java.util.List;

 

import com.cxh.study.platform.entity.User;

 

public interface IUserService {

 

     // 获取所有用户

     List<User> getAll();

 

     // 根据id获取用户

     User getUserById(Integer id);

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

package com.cxh.study.platform.service.impl;

 

import java.util.List;

 

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.stereotype.Service;

 

import com.cxh.study.platform.entity.User;

import com.cxh.study.platform.mapper.IUserMapper;

import com.cxh.study.platform.service.IUserService;

 

@Service ( "userServiceImpl" )

public class UserServiceImpl implements IUserService {

    

     @Autowired

     private IUserMapper userMapper;

 

     @Override

     public List<User> getAll() {

         return userMapper.getAll();

     }

 

     @Override

     public User getUserById(Integer id) {

         return userMapper.getUserById(id);

     }

 

}

5. 编写mapper类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

package com.cxh.study.platform.mapper;

 

import java.util.List;

 

import org.apache.ibatis.annotations.Mapper;

 

import com.cxh.study.platform.entity.User;

 

@Mapper

public interface IUserMapper {

     //获取所有用户

     List<User>getAll();

     //根据id获取用户

     User getUserById(Integer id);

}

?

1

2

3

4

5

6

7

8

9

10

11

12

13

<? xml version = "1.0" encoding = "UTF-8" ?>

<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >

< mapper namespace = "com.cxh.study.platform.mapper.IUserMapper" >

     <!--获取所有用户  -->

     < select id = "getAll" resultType = "com.cxh.study.platform.entity.User" >

         SELECT * FROM s_user

     </ select >

     <!-- 根据id获取单个用户 -->

     < select id = "getUserById" parameterType = "java.lang.Integer" resultType = "com.cxh.study.platform.entity.User" >

         SELECT * FROM s_user

         where id=#{id}

     </ select >

</ mapper >

6. 编写测试类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

package com.cxh.test;

 

import java.net.URL;

import java.util.List;

 

import org.junit.Before;

import org.junit.Test;

import org.junit.runner.RunWith;

import org.springframework.beans.factory.annotation.Autowired;

import org.springframework.boot.context.embedded.LocalServerPort;

import org.springframework.boot.test.context.SpringBootTest;

import org.springframework.boot.test.web.client.TestRestTemplate;

import org.springframework.http.ResponseEntity;

import org.springframework.test.context.junit4.SpringRunner;

 

import com.cxh.study.platform.GeneratorApp;

import com.cxh.study.platform.entity.User;

 

 

/**

  *

  * @desciption 用户管理测试类

  * @author ChenXiHua

  * @date 2019年2月19日

  *

  */

@RunWith (SpringRunner. class )

@SpringBootTest (classes = GeneratorApp. class , webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

public class UserTest {

    

      /**

      * @LocalServerPort 提供了 @Value("${local.server.port}") 的代替

      */

     @LocalServerPort

     private int port;

 

     private URL base;

 

     @Autowired

     private TestRestTemplate restTemplate;

 

     @Before

     public void setUp() throws Exception {

         String url = String.format( "http://localhost:%d/" , port);

         System.out.println(String.format( "port is : [%d]" , port));

         this .base = new URL(url);

     }

 

     /**

      * 向"/test"地址发送请求,并打印返回结果

      * @throws Exception

      */

     //@Test

     public void test1() throws Exception {

 

         ResponseEntity<String> response = this .restTemplate.getForEntity(

                 this .base.toString() + "/test" , String. class , "" );

         System.out.println(String.format( "测试结果为:%s" , response.getBody()));

     }

    

     //@Test

     public void getAllTest() throws Exception {

 

         ResponseEntity<List> response = this .restTemplate.getForEntity(

                 this .base.toString() + "/getAll" , List. class , "" );

         System.out.println(String.format( "测试结果为:%s" , response.getBody()));

     }

    

     @Test

     public void getUserByIdTest() throws Exception {

 

         ResponseEntity<User> response = this .restTemplate.getForEntity(

                 this .base.toString() + "/getUserById?id=1" , User. class , "" );

         System.out.println(String.format( "测试结果为:%s" , response.getBody().toString()));

     }

 

}

其中,classes属性指定启动类,SpringBootTest.WebEnvironment.RANDOM_PORT经常和测试类中@LocalServerPort一起在注入属性时使用。会随机生成一个端口号。

7.测试结果:

2019-02-19 16:18:27.933  INFO 6676 --- [           main] com.cxh.test.UserTest                    : Started UserTest in 25.637 seconds (JVM running for 27.647)

port is : [14067]

2019-02-19 16:18:31.366  INFO 6676 --- [o-auto-1-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring FrameworkServlet 'dispatcherServlet'

2019-02-19 16:18:31.367  INFO 6676 --- [o-auto-1-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization started

2019-02-19 16:18:31.462  INFO 6676 --- [o-auto-1-exec-1] o.s.web.servlet.DispatcherServlet        : FrameworkServlet 'dispatcherServlet': initialization completed in 95 ms

测试结果为:User [id=1, account=cxh, password=123, type=1, status=1]

2019-02-19 16:18:35.326  INFO 6676 --- [       Thread-5] ationConfigEmbeddedWebApplicationContext : Closing org.springframework.boot.context.embedded.AnnotationConfigEmbeddedWebApplicationContext@191004a: startup date [Tue Feb 19 16:18:05 CST 2019]; root of context hierarchy

到此这篇关于SpringBoot使用@SpringBootTest注解开发单元测试教程的文章就介绍到这了,更多相关SpringBoot使用@SpringBootTest开发单元测试内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!

原文链接:https://blog.csdn.net/weixin_39220472/article/details/87714756

查看更多关于SpringBoot使用@SpringBootTest注解开发单元测试教程的详细内容...

  阅读:18次