2017-03-01 71 views
2

我试图在JUnit测试中使用来自algolia的searchAsync,但由于搜索结果不再回来,它在死锁中结束。这里是我的代码:使用Algolia Android客户端进行单元测试时出现死锁

final Index index = AlgoClient.initIndex("contacts"); 

    Query query = new Query(); 

    query.setHitsPerPage(100); 

    CountDownLatch signal = new CountDownLatch(1); 

    index.searchAsync(query, new CompletionHandler() { 

     @Override 
     public void requestCompleted(JSONObject content, AlgoliaException e) { 

      signal.countDown(); 
     }); 

    signal.await(); 

回答

3

您需要使用await进行超时,如果超时则失败。此外,您应该测试您的CompletionHandler中的错误:

final Index index = client.getIndex("contacts"); 
    Query query = new Query().setHitsPerPage(100); 
    final CountDownLatch signal = new CountDownLatch(1); 

    index.searchAsync(query, new CompletionHandler() { 
     @Override 
     public void requestCompleted(JSONObject content, AlgoliaException e) { 
      if (e == null) { 
       signal.countDown(); // Request success 
      } else { 
       fail(e.getMessage()); // Request error 
      } 
     } 
    }); 

    try { 
     if (!signal.await(10, TimeUnit.SECONDS)) { // returns false when timeout 
      fail("Didn't count down"); 
     } 
    } catch (InterruptedException e) { 
     fail("interrupted"); 
    }