嵌入式Redis服务器在Spring Boot测试中的使用教程

1、概述

spring data redis提供了一种与redis实例集成的简单方法。

但是,在某些情况下,使用嵌入式服务器比使用真实服务器创建开发和测试环境更方便。

因此,我们将学习如何设置和使用嵌入式redis服务器。

2、依赖

让我们首先添加必要的依赖项:

<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-data-redis</artifactid>
</dependency>

<dependency>
  <groupid>it.ozimov</groupid>
  <artifactid>embedded-redis</artifactid>
  <version>0.7.2</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupid>org.springframework.boot</groupid>
  <artifactid>spring-boot-starter-test</artifactid>
  <scope>test</scope>
</dependency>

这个spring-boot-starter-test包含我们需要运行集成测试的各种依赖。

此外,embedded-redis包含我们将使用的嵌入式服务器。

3、设置

添加依赖项后,我们应该定义redis服务器和我们的应用程序之间的连接设置。

让我们首先创建一个类来保存我们的属性:

@configuration
public class redisproperties {
    private int redisport;
    private string redishost;

    public redisproperties(
      @value("${spring.redis.port}") int redisport, 
      @value("${spring.redis.host}") string redishost) {
        this.redisport = redisport;
        this.redishost = redishost;
    }

    // getters
}

接下来,我们应该创建一个配置类来定义连接并使用我们的属性:

@configuration
@enableredisrepositories
public class redisconfiguration {

    @bean
    public lettuceconnectionfactory redisconnectionfactory(
      redisproperties redisproperties) {
        return new lettuceconnectionfactory(
          redisproperties.getredishost(), 
          redisproperties.getredisport());
    }

    @bean
    public redistemplate<?, ?> redistemplate(lettuceconnectionfactory connectionfactory) {
        redistemplate<byte[], byte[]> template = new redistemplate<>();
        template.setconnectionfactory(connectionfactory);
        return template;
    }
}

配置非常简单。这样我们的嵌入式服务器可以在其他的端口上运行。

4、嵌入式redis服务器

现在,我们将配置嵌入式服务器并在我们的一项测试中使用它。

首先,让我们在测试的资源目录(src/test/resources)中创建一个application.properties文件:

spring.redis.host=localhost
spring.redis.port=6370

之后,我们将创建一个@testconfiguration注解的配置类:

@testconfiguration
public class testredisconfiguration {

    private redisserver redisserver;

    public testredisconfiguration(redisproperties redisproperties) {
        this.redisserver = new redisserver(redisproperties.getredisport());
    }

    @postconstruct
    public void postconstruct() {
        redisserver.start();
    }

    @predestroy
    public void predestroy() {
        redisserver.stop();
    }
}

当context上下文启动,服务器就跟着启动。它根据我们在属性中定义的端口运行在我们的机器上。有了它,我们现在可以在不停止实际redis服务器的情况下运行测试了。

理想情况下,我们希望在随机可用端口上启动它,但嵌入式redis尚不具备此功能。我们现在可以做的是通过serversocket api 获取随机端口。

此外,当上下文停止,服务器也跟着停止。

服务器也可以由我们自己的可执行文件来提供:

this.redisserver = new redisserver("/path/redis", redisproperties.getredisport());

此外,可执行文件可以按不同的操作系统来定义:

redisexecprovider customprovider = redisexecprovider.defaultprovider()
.override(os.unix, "/path/unix/redis")
.override(os.windows, architecture.x86_64, "/path/windows/redis")
.override(os.mac_os_x, architecture.x86_64, "/path/macosx/redis");

this.redisserver = new redisserver(customprovider, redisproperties.getredisport());

最后,让我们创建一个使用testredisconfiguration类的测试吧:

@runwith(springrunner.class)
@springboottest(classes = testredisconfiguration.class)
public class userrepositoryintegrationtest {

    @autowired
    private userrepository userrepository;

    @test
    public void shouldsaveuser_toredis() {
        uuid id = uuid.randomuuid();
        user user = new user(id, "name");

        user saved = userrepository.save(user);

        assertnotnull(saved);
    }
}

这样用户保存就到了我们的嵌入式redis服务器。

此外,我们必须手动将testredisconfiguration添加到springboottest。正如我们之前所说,服务器在测试之前启动并在测试之后停止。

5、结论

嵌入式redis服务器是在测试环境中替换实际服务器的完美工具。我们已经看到了如何配置它以及如何在我们的测试中使用它。

到此这篇关于嵌入式redis服务器在spring boot测试中的使用的文章就介绍到这了,更多相关redis spring boot使用内容请搜索www.887551.com以前的文章或继续浏览下面的相关文章希望大家以后多多支持www.887551.com!

(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐