@Test
  public void testSaveMongoUser() {
    String[] ids = new String[1];
    when(mongoUserDao.save(
            argThat(
                new ArgumentMatcher<MongoUser>() {
                  @Override
                  public boolean matches(Object argument) {
                    return argument instanceof MongoUser;
                  }
                })))
        .thenAnswer(
            new Answer<MongoUser>() {
              @Override
              public MongoUser answer(InvocationOnMock invocation) throws Throwable {
                MongoUser user = invocation.getArgumentAt(0, MongoUser.class);
                user.setId(ids[0] = UUID.randomUUID().toString());
                return user;
              }
            });
    MongoUser mongoUser = new MongoUser();
    mongoUser.setName("test");
    MongoUser saved = service.saveMongoUser(mongoUser).toBlocking().first();

    Assert.assertNotNull(saved);
    Assert.assertEquals(mongoUser.getName(), saved.getName());
    Assert.assertEquals(ids[0], saved.getId());
  }
  @Test
  public void testGetMongoUser() {
    List<MongoUser> list = new ArrayList<MongoUser>();
    MongoUser user = new MongoUser();
    user.setId(UUID.randomUUID().toString());
    user.setName("user");
    list.add(user);

    when(mongoUserDao.findByName(anyString())).thenReturn(list);
    when(mongoUserDao.findByName(null))
        .thenThrow(new NullPointerException("username cannot be null"));

    List<MongoUser> listRs = service.findMongoUserByName("user").toBlocking().first();

    verify(mongoUserDao).findByName(anyString());

    Assert.assertNotNull(listRs);
    Assert.assertTrue(listRs.containsAll(list));

    expectedException.expect(NullPointerException.class);
    expectedException.expectMessage("username cannot be null");
    service.findMongoUserByName(null).toBlocking().first();
  }