如何使用这种可观察的异步方法

时间:2016-05-01 09:37:54

标签: java java-8 reactive-programming observable lettuce

我有使用java8和被动测试异步执行的repo:

zadd的界面:

Observable<Long> zadd(K key, double score, V member);



 public class TargetClass()
{
..
     public void executeMethod(List<String> input) {
            input.forEach(item -> redisConnection.reactive().zadd(...).subscribe(
                    result -> log.info("Success")
                    error -> log.error("Failed...")
            ));
        }
..
}

我的junit测试代码:

@Test
public void testMethod() {
  TargetClass targetClass=new TargetClass();
    targetClass.executeMethod(Arrays.asList("input1", "input2", "input3"));

    //as you can see I must put here Thread.sleep in order to let my execution to finish before continue since we have dependency on it

    try {
        Thread.sleep(4000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    //continue with testing..

如何修改我的代码部分权限。添加Thread.sleep让异步方法代码发生是不正确的

谢谢, 射线。

1 个答案:

答案 0 :(得分:1)

如果我是你,我会通过添加2个新参数来重载方法/etc/haproxy/haproxy.cfg,一个参数将是在executeMethod上执行的函数,另一个参数将在success上执行。我会使用新方法failure而不是protected,我会在单元测试中测试这个新方法而不是另一个。您的public方法可以使用此public调用新方法。在我的单元测试中,我可以提供一种方法来获得这样的结果:

executeMethod(input, result -> log.info("Success"), error -> log.error("Failed..."))