好得很程序员自学网

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

SpringBoot Controller Post接口单元测试示例

概述

在日常的开发中,我们一般会定义一个 service 层,用于实现业务逻辑,并且针对 service 层会有与之对应的齐全的覆盖率高的单元测试。而对于 controller 层,一般不怎么做单元测试,因为主要的核心业务逻辑都在 service 层里, controller 层只是做转发,调用 service 层接口而已。但是还是建议使用单元测试简单的将 controller 的方法跑一下,看看转发和数据转换的代码是否能正常工作。

在 spring boot 里对 controller 层进行单元测试非常简单,只需要几个注解和一点点辅助代码即可搞定。

依赖的包

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

<dependency>

  <groupid>org.junit.jupiter</groupid>

  <artifactid>junit-jupiter-api</artifactid>

  <scope>test</scope>

</dependency>

<dependency>

  <groupid>org.junit.jupiter</groupid>

  <artifactid>junit-jupiter-engine</artifactid>

  <scope>test</scope>

</dependency>

<dependency>

  <groupid>org.springframework.boot</groupid>

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

  <scope>test</scope>

</dependency>

<dependency>

  <groupid>com.alibaba</groupid>

  <artifactid>fastjson</artifactid>

</dependency>

使用的spring boot 版本

2.0.4.release

代码

?

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

@extendwith (springextension. class )

@springboottest (webenvironment =springboottest.webenvironment.mock,classes = testapplication. class )

@autoconfiguremockmvc

public class usercontrollertest {

  @autowired

  private mockmvc mockmvc;

  @mockbean

  private userservice userservice;

  @test

  @displayname ( "测试controller方法" )

  void test() throws exception {

   user param = new user();

   param.setuserid( 1111 );

   list<address> addresslist = new arraylist<>();

   address address = new address();

   address.setname( "我的地址" );

   addresslist.add(address);

   param.setaddresslist(addresslist);

   mvcresult mvcresult = mockmvc.perform(

     post( "/xxx/test" )

       .contenttype(mediatype.application_json)

       .content(json.tojsonstring(param)))

     .andreturn();

  

   system.out.println(mvcresult.getresponse().getcontentasstring());

  }

}

?

1

2

3

@requestmapping (value = "/xxx" , method = requestmethod.post)

public object test( @requestbody (required = false )user user) throws exception {

}

如果你只是想简单的跑一下 controller 层,不想真正的去执行 service 方法的话,需要使用 @mockbean 将对应的 service 类 mock 掉。

?

1

2

@mockbean

private userservice userservice;

使用 spring boot test 的时候,它需要一个 applicationcontext ,我们可以在 @springboottest 注解中使用 classes 属性来指定。

?

1

@springboottest (webenvironment =springboottest.webenvironment.mock,classes = testapplication. class )

testapplication 的代码很简单。

?

1

2

3

4

5

6

7

8

9

10

@springbootapplication

public class testapplication {

  public static void main(string[] args){

   springapplicationbuilder builder = new springapplicationbuilder();

   builder.environment( new standardenvironment());

   builder.sources(testapplication. class );

   builder.main(testapplication. class );

   builder.run(args);

  }

}

接下来我们只需要使用 mockmvc 发送 post 请求即可。如果 controller 层的 post 方法是带 @requestbody 注解的,可以先将入参对象转换成 json 字符串。这里使用的是 fastjson 。

?

1

json.tojsonstring(param)

经过测试,如上代码能正常工作。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接

原文链接:https://blog.csdn.net/linsongbin1/article/details/83574619

查看更多关于SpringBoot Controller Post接口单元测试示例的详细内容...

  阅读:11次