【问题标题】:How to Unit Test AggregateIterable<User>如何对 AggregateIterable<User> 进行单元测试
【发布时间】:2019-07-05 18:26:39
【问题描述】:

努力模拟在 Java/Mongo 中使用 AggregateIterable 时要返回的内容。

我尝试过使用 MongoCursor,但很难理解这一点。我想为此使用单元测试涵盖所有路径。使用 mockito 和 testNG 的最佳方法是什么。

public List<User> getAggregatedList(User user){

  AggregateIterable<User> agg = collection.aggregate(pipeline, User.class)

  List<User> users = new ArrayList<>();

  if (agg != null){
    Iterator<User> it = agg.iterator();
    while(it.hasNext()){
      users.add(it.next());
    } 
  }

return users;
}

我应该能够编写一个测试,例如:

...
expected = Arrays.asList(user1,user2...)
verify(result,expect)

【问题讨论】:

  • 你想测试什么 - getAggregatedList 方法的返回?然后你可能想模拟集合,但是你的代码没有显示足够的东西来决定它是否可以被模拟。此外,如果您所指的验证方法应该是 Mockito.verify ,那么您误解了该方法的目的。

标签: mongodb mockito aggregation-framework testng


【解决方案1】:

您可以像这样模拟迭代器的 hasNext() 和 next() 方法来测试它:

@Test
public void testGetAggregatedList() {
    MongoCollection collection = PowerMockito.mock(MongoCollection.class);
    AggregateIterable<User> iterable = PowerMockito.mock(AggregateIterable.class);
    MongoClient client = PowerMockito.mock(MongoClient.class);
    MongoDatabase db = PowerMockito.mock(MongoDatabase.class);
    MongoCursor iterator = PowerMockito.mock(MongoCursor.class);
    User user1 = PowerMockito.mock(User.class);
    User user2 = PowerMockito.mock(User.class);

    MongoDaoDelegator.setClient(client);
    PowerMockito.when(client.getDatabase(anyString())).thenReturn(db);
    PowerMockito.when(db.getCollection(anyString())).thenReturn(collection);
    PowerMockito.when(collection.aggregate(anyList(),any())).thenReturn(iterable);
    PowerMockito.when(iterable.iterator()).thenReturn(iterator);
    PowerMockito.when(iterator.hasNext()).thenReturn(true,true,false);
    PowerMockito.when(iterator.next()).thenReturn(user1,user2);

    getAggregatedList(new User()); 
}

这将为您提供您期望的结果。

【讨论】:

    猜你喜欢
    • 2012-01-08
    • 2019-11-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-30
    • 2019-01-05
    • 2011-03-16
    • 2013-01-02
    • 2020-04-23
    相关资源
    最近更新 更多