若依微服务版(SpringBoot/SpringCloudAlibaba)中在单个服务模块中进行单元测试

梦里梦外; 2023-09-30 19:11 56阅读 0赞

场景

若依微服务版手把手教你本地搭建环境并运行前后端项目:

若依微服务版手把手教你本地搭建环境并运行前后端项目_霸道流氓气质的博客-CSDN博客

在上面的基础上需要在某个服务模块中进行单元测试。

注:

博客:
霸道流氓气质的博客_CSDN博客-C#,架构之路,SpringBoot领域博主

实现

1、首先在需要进行单元测试的服务模块中引入依赖spring-boot-starter-test

  1. <dependency>
  2. <groupId>org.springframework.boot</groupId>
  3. <artifactId>spring-boot-starter-test</artifactId>
  4. </dependency>

2、新建test目录/包,包名路径与src/main/java下的根包名一致

b663ea2bb224428db5f63b22dae1878b.jpeg

3、在src/test/java/包名下新建测试类

测试类上添加注解

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest(classes = RuoYiFzysApplication.class)

这里RuoYiFzysApplication.class是对应的启动类,如果不加则有可能提示:

you need to use @ContextConfiguration or @SpringBootTest(classes=…) with your test

因为我们测试类的位置跟Springboot启动类的位置对应不上,测试类启动默认会去找Springboot的启动类,因为测试类位置改变了 所以找不到启动类。

然后如果项目中有集成的websocket则可能还会提示:

javax.websocket.server.ServerContainer not available

这是因为springbootTest启动时不会启动服务器,所以websocket就会报错,

这个时候需要在注解中添加webEnvironment,给wevsocket提供测试环境。

  1. @RunWith(SpringRunner.class)
  2. @SpringBootTest(classes = RuoYiFzysApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)

4、然后测试类中新建测试方法

  1. @Test
  2. public void test1(){
  3. Collection<String> keys = redisService.keys(CAR_CARD_REAL_TIME + "*");
  4. }

并在测试方法上他添加注解

这里以获取redis中指定前缀开头的key为例。

如果需要引入外部依赖,则需要注入并添加注解,比如这里的redisService

  1. @Autowired
  2. private RedisService redisService;

5、完整的测试类

  1. package ruoyi.fzys;
  2. import com.ruoyi.common.redis.service.RedisService;
  3. import com.ruoyi.fzys.RuoYiFzysApplication;
  4. import org.junit.Test;
  5. import org.junit.runner.RunWith;
  6. import org.springframework.beans.factory.annotation.Autowired;
  7. import org.springframework.boot.test.context.SpringBootTest;
  8. import org.springframework.test.context.junit4.SpringRunner;
  9. import java.util.Collection;
  10. @RunWith(SpringRunner.class)
  11. @SpringBootTest(classes = RuoYiFzysApplication.class,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
  12. public class ScanNoLoginEachHourTest {
  13. @Autowired
  14. private RedisService redisService;
  15. public static final String CAR_CARD_REAL_TIME = "car:realTime";
  16. @Test
  17. public void test1(){
  18. Collection<String> keys = redisService.keys(CAR_CARD_REAL_TIME + "*");
  19. }
  20. }

6、进行测试

3655d817464049e28ccc2a49b2f429b0.jpeg

发表评论

表情:
评论列表 (有 0 条评论,56人围观)

还没有评论,来说两句吧...

相关阅读

    相关 框架如何进行单元测试

    > 可能刚接触这个框架或者对Springboot不太熟悉的朋友,可能不知道如何在这个框架下进行单元测试,下面教大家如何写一个简单的单元测试案例,如果你已经会了,下面的内容可以直