标签: assertj

AssertJ 检查列表包含 X 项但都为空

我已经浏览了 AssertJ 示例(https://github.com/joel-costigliola/assertj-examples/blob/master/assertions-examples/src/test/java/org/assertj/examples/IterableAssertionsExamples.java)但是我找不到以下示例:-

  1. 断言列表的大小为 X 例如 3
  2. 断言所有项目都是 null

例如

List<String> items= Arrays.asList(null, null, null);
assertThat(items).hasSize(3).containsOnlyNulls();
Run Code Online (Sandbox Code Playgroud)

注意 -containsOnlyNulls不存在,但这基本上是我想要测试的。这可以在 AssertJ 中实现吗?

assertj

1
推荐指数
1
解决办法
2533
查看次数

使用 AssertJ,如何对列表的内容执行复杂的断言?

在 AssertJ 中,您可以执行以下操作来断言列表的内容:

assertThat(list).extracting("name").containsExactlyInAnyOrder("Alice", "Bob");
Run Code Online (Sandbox Code Playgroud)

我经常发现自己想要对元素本身做更复杂的断言,例如,断言 Alice 是一个高个子黑发,而 Bob 又小又秃。使用 AssertJ 执行此操作的最佳方法是什么?

我自己的解决方案是:

assertThat(list).extracting("name").containsExactlyInAnyOrder("Alice", "Bob");
list.stream()
    .filter(person -> "Alice".equals(person.getName()))
    .forEach(alice -> {
        assertThat(alice).extracting("size").isEqualTo("tall")
        assertThat(alice).extracting("hair").isEqualTo("brunette")
    });
list.stream()
    .filter(person -> "Bob".equals(person.getName()))
    .forEach(bob -> {
        assertThat(bob).extracting("size").isEqualTo("tiny")
        assertThat(bob).extracting("hair").isNull()
    });
Run Code Online (Sandbox Code Playgroud)

或等效地(java 7):

assertThat(list).extracting("name").containsExactlyInAnyOrder("Alice", "Bob");
for(Person person : list){
    switch (testCase.getName()){
        case "Alice":
            assertThat(person).extracting("size").isEqualTo("tall")
            assertThat(person).extracting("hair").isEqualTo("brunette")
            break;
        case "Bob":
            assertThat(person).extracting("size").isEqualTo("tiny")
            assertThat(person).extracting("hair").isNull()
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更好的解决方案。

我喜欢这个解决方案区分列表中的预期元素和元素本身是正确的这一事实。

java assertj

1
推荐指数
1
解决办法
2083
查看次数

AssertJ:声明列表是按逆序还是降序排序

我正在使用AssertJ进行测试,并且注意到有一种检查a List<T>是否排序的方法:

public static <T> void sorted(final List<T> actual) {
    try {
        assertThat(actual).isSorted();
    } catch (AssertionError e) {
        LOGGER.error(e.getMessage(), e);
        throw e;
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法检查列表是否按降序排列?

我知道番石榴提供了,Ordering.natural().reverse().isOrdered(values)但是我想利用AssertJ的assert消息,因为它确实对调试很有帮助,例如

group is not sorted because element 5:
 <"4000366190001391">
is not less or equal than element 6:
 <"4000206280001394">
group was:
 <["4000206280001363",
    "4000206280001364",
    "4000206280001365",
    "4000206280001373",
    "4000206280001388",
    "4000366190001391",
    "4000206280001394",
    "4000366190001401",
    "4000206280001403",
    "4000206280001405",
     ....]>
Run Code Online (Sandbox Code Playgroud)

java sorting list assertj

1
推荐指数
1
解决办法
1572
查看次数

如何使用AssertJ检查某些List是否仅包含一个特定元素或为空

我有:

@Test
public void testSomethingInFooFunction() {
    //given
    Something parameter = new Something();
    //when
    List<Object> result = foo(parameter);
    //then

    // not working
    assertThat(result).isEmpty().or().containsOnly(something());
    assertThat(result).is(v -> v.isEmpty() || v.containsOnly(something());

    //is working
    assertThat(result.isEmpty() || (
        result.contains(something())
        && result.size() == 1)
    ).isTrue();

}
Run Code Online (Sandbox Code Playgroud)

还有其他测试条件的方法,例如:

result.isEmpty()|| (result.contains(something())&& result.size()== 1)

问:如何使用AssertJ 3.11.1简化它?

java testing assertj

1
推荐指数
1
解决办法
205
查看次数

AssertJ 使用 List 字段验证对象列表不为空

例子:

public class Office {
  List<Employee> employee;
}
Run Code Online (Sandbox Code Playgroud)

我如何断言在我List<Office> offices没有员工的情况下没有?是否可以用一个断言链来断言这一点?

assertj

1
推荐指数
1
解决办法
3406
查看次数

如何用AssertJ检查布尔getter?

它看起来很酷

assertThat(yoda).is(jedi);
Run Code Online (Sandbox Code Playgroud)

直到你不知道是什么yodajedi.但是假设

yoda instanceof Person
Run Code Online (Sandbox Code Playgroud)

哪里

interface Person {
    boolean isJedi();
}
Run Code Online (Sandbox Code Playgroud)

那么如何实际检查isJediAssertJ

在传统JUnit我会写

assertTrue( yoda.isJedi() );
Run Code Online (Sandbox Code Playgroud)

但是在AssertJ什么?

java unit-testing assertj

0
推荐指数
1
解决办法
983
查看次数

标签 统计

assertj ×6

java ×4

list ×1

sorting ×1

testing ×1

unit-testing ×1