我们在公司里,接手了别人的项目,面对项目里用到redis的部分,很多时候,我们只是想测一下redis是否能连通,或者key是否有值。我们不想启动一堆东西。
此文是使用jedis来测试。配置写在xml配置文件里。
代码如下:
单元测试 v1.0
目录结构
xx-service
├── src
│ ├── main
│ │ ├── java
│ │ └── resources
│ ├── test
│ │ ├── java
│ │ └── resources
单元测试都放在 test 目录下。
1. java类
java文件放在 /src/test/java 下,在该目录下创建package
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)//表示整合JUnit4进行测试
@ContextConfiguration(locations={"classpath:applicationContext-redis.xml"})//加载spring配置文件
public class BaseRedisTest {
@Autowired
private JedisPool jedisPool;
@Test
public void t1() {
String time = "2023-08-24";
String key = "queryEmps:"+"_"+time;
Jedis jedis = jedisPool.getResource();
String value = jedis.get(key);
System.out.println(value);
}
}
@RunWith(SpringRunner.class) 是 spring+junit整合。
@ContextConfiguration(locations={"classpath:applicationContext-redis.xml"}) 是指定bean的配置文件位置。这样就可以把redis的配置写在配置文件里,方便从原项目里直接copy。
2. applicationContext-redis.xml
xml文件放在 /src/test/resources 下。
redis无密码的配置
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
redis有密码的配置
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
3. pom.xml
版本号随意。不过2.4版本之后和之前,配置里会有字段变化。
这样就可以连通redis,并且对redis做增删改查了。
单元测试 v2.0
在 v1.0 的基础上,对java类做了优化。提取出一个父类,将注解等配置放在这个父类里。子类专注于写业务代码。
代码如下:
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext-redis.xml"})
public class BaseRedisTest {
@Autowired
protected JedisPool jedisPool;
}
import org.junit.Test;
public class T1 extends BaseRedisTest {
@Test
public void get(){
String time = "2023-08-24";
String key = "queryEmps"+"_"+time;
Jedis jedis = jedisPool.getResource();
String value = jedis.get(key);
System.out.println(value);
}
}
单元测试 v3.0
在v2.0的基础上,对java类再做优化。这一次的优化主要是针对 jedisPool。我们需要对 jedisPool 做一层封装,方便我们使用,这也起到隔离防腐作用。
写个接口,取名为 JedisClient
public interface JedisClient {
String set(String key, String value);
String get(String key);
Boolean exists(String key);
Long expire(String key, int seconds);
Long ttl(String key);
Long incr(String key);
Long hset(String key, String field, String value);
String hget(String key, String field);
Long hdel(String key, String... field);
Boolean hexists(String key, String field);
List
Long hincrby(String key,String field,Long value);
Long del(String key);
}
写个实现类,取名为 JedisClientPool,封装JedisPool
import redis.clients.jedis.Jedis;
import redis.clients.jedis.JedisPool;
import java.util.List;
public class JedisClientPool implements JedisClient {
private JedisPool jedisPool;
public JedisPool getJedisPool() {
return jedisPool;
}
public void setJedisPool(JedisPool jedisPool) {
this.jedisPool = jedisPool;
}
public String set(String key, String value) {
Jedis jedis = jedisPool.getResource();
String result = jedis.set(key, value);
jedis.close();
return result;
}
public String get(String key) {
Jedis jedis = jedisPool.getResource();
String result = jedis.get(key);
jedis.close();
return result;
}
public Boolean exists(String key) {
Jedis jedis = jedisPool.getResource();
Boolean result = jedis.exists(key);
jedis.close();
return result;
}
public Long expire(String key, int seconds) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.expire(key, seconds);
jedis.close();
return result;
}
public Long ttl(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.ttl(key);
jedis.close();
return result;
}
public Long incr(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.incr(key);
jedis.close();
return result;
}
public Long hset(String key, String field, String value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hset(key, field, value);
jedis.close();
return result;
}
public String hget(String key, String field) {
Jedis jedis = jedisPool.getResource();
String result = jedis.hget(key, field);
jedis.close();
return result;
}
public Long hdel(String key, String... field) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hdel(key, field);
jedis.close();
return result;
}
public Boolean hexists(String key, String field) {
Jedis jedis = jedisPool.getResource();
Boolean result = jedis.hexists(key, field);
jedis.close();
return result;
}
public List
Jedis jedis = jedisPool.getResource();
List
jedis.close();
return result;
}
public Long del(String key) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.del(key);
jedis.close();
return result;
}
public Long hincrby(String key,String field,Long value) {
Jedis jedis = jedisPool.getResource();
Long result = jedis.hincrBy(key, field, value);
jedis.close();
return result;
}
}
配置文件 applicationContext-redis.xml 需要添加 JedisClientPool 的 bean,如下:
添加完以后,整个文件内容如下:
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
在测试类的父类里,使用自己写的 JedisClient 这个接口(之前用的是 jedis 自己的 JedisPool),通过注解 @Autowired 将实现类 JedisClientPool 注入。
import org.junit.runner.RunWith;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class)
@ContextConfiguration(locations={"classpath:applicationContext-redis.xml"})
public class BaseRedisTest {
@Autowired
protected JedisClient jedisClient;
}
在测试类的子类里,使用自己写的 JedisClient 对 redis 进行增删改查。
import org.junit.Test;
public class T1 extends BaseRedisTest {
@Test
public void get(){
String time = "2023-08-24";
String key = "queryEmpStatistics"+"_"+time;
String value = jedisClient.get(key);
System.out.println(value);
}
}
JedisClient操作redis 单机版和集群版
redis设置密码以及jedisPool设置密码_泼墨画丹青的博客-CSDN博客
=====================分割线========================
文章到此已经结束,以下是紫薯布丁
import org.junit.Test; public class Tt1 extends BaseRedis {
@Test public void get(){ String time = "2023-08-25"; String key = "queryEmpStatistics"+"_"+time;
String value = jedisClient.get(key); System.out.println(value); } }
import org.junit.runner.RunWith; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringRunner;
@RunWith(SpringRunner.class) @ContextConfiguration(locations={"classpath:applicationContext-redis.xml"}) public class BaseRedisTest { @Autowired protected JedisClient jedisClient;
}
import redis.clients.jedis.Jedis; import redis.clients.jedis.JedisPool;
import java.util.List;
public class JedisClientPool implements JedisClient {
private JedisPool jedisPool; public JedisPool getJedisPool() { return jedisPool; }
public void setJedisPool(JedisPool jedisPool) { this.jedisPool = jedisPool; } public String set(String key, String value) { Jedis jedis = jedisPool.getResource(); String result = jedis.set(key, value); jedis.close(); return result; } public String get(String key) { Jedis jedis = jedisPool.getResource(); String result = jedis.get(key); jedis.close(); return result; } public Boolean exists(String key) { Jedis jedis = jedisPool.getResource(); Boolean result = jedis.exists(key); jedis.close(); return result; } public Long expire(String key, int seconds) { Jedis jedis = jedisPool.getResource(); Long result = jedis.expire(key, seconds); jedis.close(); return result; } public Long ttl(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.ttl(key); jedis.close(); return result; } public Long incr(String key) { Jedis jedis = jedisPool.getResource(); Long result = jedis.incr(key); jedis.close(); return result; } public Long hset(String key, String field, String value) { Jedis jedis = jedisPool.getResource(); Long result = jedis.hset(key, field, value); jedis.close(); return result; } public String hget(String key, String field) { Jedis jedis = jedisPool.getResource(); String result = jedis.hget(key, field); jedis.close(); return result; } public Long hdel(String key, String... field) { Jedis jedis = jedisPool.getResource(); Long result = jedis.hdel(key, field); jedis.close(); return result; } public Boolean hexists(String key, String field) { Jedis jedis = jedisPool.getResource(); Boolean result = jedis.hexists(key, field); jedis.close(); return result; } public List
public interface JedisClient { ..... Boolean exists(String key); Long expire(String key, int seconds); Long ttl(String key);
...... Long incr(String key); Long hset(String key, String f, String value); String hget(String key, String f); Long hdel(String key, String... f); Boolean hexists(String key, String f);
..... List
String set(String key, String value); String get(String key) }
相关文章
发表评论