与 Redis 的集成测试

在Jedis库的帮助下,我开始在我的项目中使用Redis。一切都很好,但现在我有一个问题,我的功能测试需要Redis才能启动,我想在我的持续集成中避免这个问题。最好的方法是什么?


答案 1

我已经为Java实现了一个简单的redis嵌入式运行器:https://github.com/kstyrc/embedded-redis

目前,它使用 redis 2.6.14 for*nix 和 https://github.com/MSOpenTech/redis for Windows。但是,您可以利用 RedisServer 类来运行自己的运行脚本。

我计划扩展实现以支持RedisConf(bind,slaveof,port,dbfilename等)。在此之后,我将把 jar 上传到 clojars for mvn deps。


答案 2

以下是功能/集成测试的几个选项:

  1. 只需在 CI 服务器上启动一个 redis 实例即可。所有测试都将负责在执行后进行适当的清理。
  2. 尝试以某种方式控制 redis 进程,即在 CI 服务器上有一些 shell 脚本或作业,以便在运行测试之前/之后启动/停止它。至少从测试中消除了一些设置/清理的负担,因为对于每个独立的构建,您将拥有独立的redis设置。
  3. 通过使用一些内存中解决方案(例如您提到的cassandra解决方案(如果存在)来进一步控制redis。

值得一提的是,集成测试不应该取代单元测试。单元测试可能是首选,它们可以涵盖更多情况,而集成测试可用于检查应用程序的所有部分是否很好地协同工作。我认为这就是为什么很多人选择第一个选项的原因。

这里有一个关于mongodb的类似问题 答案有一个指向适用于第二个选项的项目的链接(控制mongodb进程)如果你关注项目页面上的一些相关链接,还有一个叫做nosql-unit的东西。我认为这个试图涵盖选项三。我没有使用它,但看起来它也有redis的东西。


推荐