我已经在Jedis库的帮助下,在我的项目中开始使用Redis。所有工作正常,但现在我有一个问题,即我的功能测试需要Redis在我的持续集成中想要避免的问题。做这个的最好方式是什么?使用Redis进行集成测试
回答
这里有你有几个选项的功能/集成测试:
- 你CI服务器上刚开始的Redis的一个实例。所有测试将在执行后负责进行适当的清理。
- 尝试以某种方式控制redis进程,即在CI服务器上运行一些shell脚本或作业,以在运行测试之前/之后启动/停止它。至少有一些安装/清理的负担会从测试中删除,因为对于每个独立的版本,您将拥有独立的redis设置。
- 通过使用一些内存中的解决方案来进一步控制redis,就像您提到的cassandra(如果存在)。
有一件事要提的是,集成测试不应该取代单元测试。单元测试可能应该是首选,他们可以覆盖更多的案例,而集成测试可以用来检查应用程序的所有部分在一起玩的很好。我认为这就是很多人选择第一选择的原因。
这里有一个类似的问题about mongodb答案有一个链接到该工程第二个选项(控制MongoDB的过程),如果按照项目页面上的一些相关的链接这里还有一些所谓nosql-unit项目。这一个我认为试图涵盖选项三。我没有使用它,但看起来它也有一些redis。
您可以通过命令行在任意端口上启动Redis服务器:redis-server --port 7777
。因此,为了进行集成测试,您可以在可用(或随机)端口上启动Redis,确保将Jedis配置为使用该端口。
通过这种方式,您已知道Redis的“新鲜”实例,您知道它不会与任何其他进程(包括同时发生的其他测试运行)发生冲突。这与我认为运行内存/嵌入式数据库进行集成测试的模拟结果非常接近。
要使用“canned data”预加载Redis,请使用--dbfilename <file>
开关:redis-server --port 7777 --dbfilename test.rdb
。
我实现了嵌入式亚军为一个简单的Java Redis的: https://github.com/kstyrc/embedded-redis
目前,它使用的Redis 2.6.14在* nix和https://github.com/MSOpenTech/redis为Windows。但是,您可以使用RedisServer类来运行您自己的运行脚本。
我打算扩展实现以支持RedisConf(bind,slaveof,port,dbfilename等)。在此之后,我会将jar上传到mvn deps的clojars。
尝试nosql-unit。它支持使用java的redis单元测试。
我试过了EmbeddedRedis,发现不支持很多Jedis接口。因此使用EmbbededRedis并不是一个好主意,特别是当你使用一些高级的redis函数时,比如“pipeline”。
我建议使用单元测试ManagedRedis:
如果你推荐一个图书馆,那么习惯性地显示它可以应用。请在答案中添加一些示例代码。 –
由于@ksytrc在his answer中提到,我基本上使用他的解决方案。它在this project中工作。您只需添加embedded-redis依赖项。
<dependency>
<groupId>com.github.kstyrc</groupId>
<artifactId>embedded-redis</artifactId>
<version>0.6</version>
<scope>test</scope>
</dependency>
然后在测试类定义redisServer
RedisServer redisServer;
@Before
public void setUp() throws IOException {
redisServer = new RedisServer();
redisServer.start();
}
还与下面定义的凭证application.yml
。
spring:
redis:
host: localhost
port: 6379
- 1. 使用Capybara进行AJAX集成测试
- 2. 使用konacha进行Emberjs集成测试
- 3. 使用AuthorizeAttribute进行MVC集成测试
- 4. EmbedMongo进行集成测试
- 5. 使用Specflow场景进行集成测试和单元测试
- 6. 使用Play Framework进行集成测试,无需使用灯具
- 7. webdriver在进行集成测试时用于测试框架java
- 8. stub webserver进行集成测试
- 9. 何处进行集成测试?
- 10. TestNG和黄瓜进行集成测试
- 11. 与IdentityServerAuthentication IdentityServer4进行集成测试
- 12. 配置Leiningen进行集成测试
- 13. 在CakePHP 2.0中进行集成测试
- 14. FeignClient集成测试使用测试双
- 15. 使用Spring/Jetty(或Tomcat)/ Maven进行REST测试配置集成测试
- 16. 我可以使用单元测试工具进行集成测试吗?
- 17. Java如何使用Maven子项目进行集成测试?
- 18. Maven:使用外部库进行集成测试
- 19. 使用Microsoft .NET进行数据库集成测试
- 20. 使用物理设备进行持续集成测试
- 21. 使用Ember CLI进行集成测试会话
- 22. 使用模拟服务/组件进行Spring Boot集成测试
- 23. 使用Seam进行集成测试:实际渲染视图
- 24. 使用Jasmine进行数据库集成测试
- 25. 使用Maven进行集成测试的最佳做法?
- 26. 使用DB单元进行弹簧控制器集成测试
- 27. 使用Selenium和NUnit进行集成测试 - 从UI到DB
- 28. 如何使用VS 2015配置log4net进行集成测试?
- 29. 使用bash与CMake和CTest进行简单的集成测试?
- 30. 使用Maven进行客户端 - 服务器集成测试
你可以将所有的jedis调用包装在DAO中以抽象redis?然后,当你运行你的单元测试时,注入一个DAO的测试实现,返回某种类型的fixture数据。 – Adam
是抽象是我想要做的事情,对于单元测试我没有问题嘲笑与Redis的连接,但对于集成测试,我正在寻找解决方案。例如。 cassandra有一些我们使用的嵌入式cassandra。 –
啊有趣 - 不确定Redis是否有类似的东西。 对于我的集成测试,我们使用特定于我们的CI环境的redis实例和特定的配置覆盖来指示测试应该针对该虚拟redis实例运行。 – Adam