如何使用Assertj断言列表内容的属性?

时间:2017-04-06 13:26:54

标签: unit-testing assertions hamcrest assertj

这就是方法。

List<User> someMethod() {
    User user[] = new Users[3];
    user[0] = new User();
    user[0].setImage(new Image(Constants.HOME));
    user[1] = new User();
    user[1].setImage(new Image(Constants.NOT_HOME));
    user[2] = new User();
    user[2].setImage(new Image(Constants.HOME));   
    return Arrays.asList(user);
}

如何测试上述代码的测试。我需要验证一些用户在HOME上有图像。

我可以尝试重新构建整个用户列表并进行比较。但是,我不想这样做。

我尝试过这样的事情,

assertThat(Optional.of(service.someMethod())).hasValueSatisfying((a)->a.stream().allMatch((b)->b.getImage().getImageUrl().equals(Constants.HOME)));

在此上下文中断言始终为true,因为hasValueSatisfying使用Consumer<T>作为参数。但是,我想以下列方式使用 - AssertJ way

我能以某种方式使用Hamcrest来解决这个问题吗?

1 个答案:

答案 0 :(得分:2)

我会使用AssertJ extracting feature

assertThat(users).extracting(user -> getImage().getImageUrl())
                 .contains(Constants.HOME)

我假设用户是List<User>,而不是List<User>的可选项。