我们在公司里,接手了别人的项目,面对项目里用到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-25";
String key = "queryEmpStatistics:"+"-"+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无密码的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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单机 -->
<bean class="redis.clients.jedis.JedisPool" id="jedisPool" >
<constructor-arg name="host" value="192.168.10.1"></constructor-arg>
<constructor-arg name="port" value="6379"></constructor-arg>
</bean>
<!-- redis集群 -->
</beans>
redis有密码的配置
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
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单机 -->
<bean class="redis.clients.jedis.JedisPool" id="jedisPool" >
<constructor-arg name="host" value="192.168.10.1"></constructor-arg>
<constructor-arg name="port" value="6379"></constructor-arg>
<constructor-arg name="password" value="xxx"></constructor-arg>
<constructor-arg name="timeout" value="3000"></constructor-arg>
<constructor-arg name="poolConfig" ref="jedisPoolConfig"></constructor-arg>
</bean>
<bean class="redis.clients.jedis.JedisPoolConfig" id="jedisPoolConfig">
<property name="maxIdle" value="300" />
<property name="maxTotal" value="1000" />
<property name="maxWaitMillis" value="1000" />
<property name="testOnBorrow" value="false" />
<property name="blockWhenExhausted" value="false" />
</bean>
</beans>
3. pom.xml
版本号随意。不过2.4版本之后和之前,配置里会有字段变化。
<dependency>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
<version>3.3.0</version>
<scope>test</scope>
</dependency>
这样就可以连通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-25";
String key = "queryEmpStatistics"+"_"+time;
Jedis jedis = jedisPool.getResource();
String value = jedis.get(key);
System.out.println(value);
}
}