代码之家  ›  专栏  ›  技术社区  ›  Kaigo

使用Redis mock的Redis单元测试

  •  0
  • Kaigo  · 技术社区  · 6 年前

    我正在使用 following 用于运行嵌入式redis进行单元测试的工具。

    在我的 注册服务 正在创建redis server的新实例。

    @Import({RedisConfiguration.class})
    @Service
    public class RegistrationService
    
    RedisTemplate redisTemplate = new RedisTemplate();  //<- new instance
    
    public String SubmitApplicationOverview(String OverviewRequest) throws IOException {
    
        . . .
    
        HashMap<String,Object> applicationData = mapper.readValue(OverviewRequest,new TypeReference<Map<String,Object>>(){});
    
        redisTemplate.setHashKeySerializer(new StringRedisSerializer());
        redisTemplate.setHashValueSerializer(new GenericJackson2JsonRedisSerializer());
    
        UUID Key = UUID.randomUUID();
    
        redisTemplate.opsForHash().putAll(Key.toString(), (applicationData)); //<-- ERRORS HERE
    
        System.out.println("Application saved:" + OverviewRequest);
    
        return Key.toString();
     }
    }
    

    我正在我的 测验 在下面

    ...
    
    RedisServer redisServer;
    
    @Autowired
    RegistrationService RegistrationService;
    
    @Before
    public void Setup() {
        redisServer = RedisServer.newRedisServer();
        redisServer.start();
    }
    
    @Test
    public void testSubmitApplicationOverview() {
        String body = "{\n" +
                "    \"VehicleCategory\": \"CAR\",\n" +
                "    \"EmailAddress\": \"email@email.com\"\n" +
                "}";
        String result = RegistrationService.SubmitApplicationOverview(body);
    
        Assert.assertEquals("something", result);
    }
    

    中的Redis设置 应用属性

    #Redis Settings
    spring.redis.cluster.nodes=slave0:6379,slave1:6379
    spring.redis.url= redis://jx-staging-redis-ha-master-svc.jx-staging:6379
    spring.redis.sentinel.master=mymaster
    spring.redis.sentinel.nodes=10.40.2.126:26379,10.40.1.65:26379
    spring.redis.database=2
    

    然而,我得到了 java.lang.NullPointerException 下一行出错 在我的测试服务(registrationService)中。

    redisTemplate.opsForHash().putAll(Key.toString(), (applicationData));
    
    1 回复  |  直到 6 年前
        1
  •  0
  •   David Karlsson    4 年前

    根据 [redis-mock][1] 文档,创建如下实例:

    RedisServer.newRedisServer();  // bind to a random port
    

    将实例绑定到随机端口。看起来您的代码需要一个特定的端口。我认为,在创建服务器时,需要通过如下方式传递端口号来指定端口:

    RedisServer.newRedisServer(8000);  // bind to a specific port