标签: assertj

使用 JUnit 和 AssertJ 测试数组是否包含元素

我使用 JUnit 4.12 和 AssertJ 3.11.0 进行了以下单元测试,并获得了有趣的结果。helloTestgreen但是worldTestred

@Test
public void helloTest() {
    Object[] array = new Object[2];
    String[] firstElement = new String[]{"Hello"};
    String[] secondElement = new String[]{"World"};
    array[0] = firstElement;
    array[1] = secondElement;
    assertThat(array).containsExactlyInAnyOrder(firstElement, secondElement);
}

@Test
public void worldTest() {
    Object[] array = new Object[1];
    String[] element = new String[]{"Hello"};
    array[0] = element;
    assertThat(array).containsExactlyInAnyOrder(element);
}
Run Code Online (Sandbox Code Playgroud)

AssertJ 的结果是

 java.lang.AssertionError: 
 Expecting:
   <[["Hello"]]>
 to contain exactly in any order:
   <["Hello"]>
 elements not found:
   <["Hello"]> …
Run Code Online (Sandbox Code Playgroud)

java junit assertj

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

assertj / Java 比较对象与列表字段忽略列表中元素的顺序

我希望在测试中比较 2 个对象列表(比如 Foo)。

List<Foo> fooA;
List<Foo> fooB;
Run Code Online (Sandbox Code Playgroud)

每个 Foo 条目都有一个 List 类型的字段(比如 Bar)

class Foo {
  private List<Bar> bars;
  ....
}

assertThat(fooA).isEqualTo(fooB);
Run Code Online (Sandbox Code Playgroud)

比较失败,因为条形的元素相同但顺序不同。

有没有办法比较它们而忽略顺序?

我不是在寻找以下选项。

assertThat(fooA).usingElementComparatorIgnoringFields("bars").isEqualTo(fooB);
Run Code Online (Sandbox Code Playgroud)

理想情况下,我想比较所有领域

java assertj

5
推荐指数
2
解决办法
6139
查看次数

即使我在使用 JDK 1.8 的 pom 版本 3.6.2 中指定,获取包 org.assertj.core.api 也不存在

我在Eclipse使用Maven. package org.assertj.core.api即使我在我的pom.xml3.6.2 版中将其指定为 3.6.2 版,但我得到的信息 并不存在JDK 1.8. 如何克服它? mvn clean install正在失败。

无法在项目 com.transunion.qa.datahub.ui.java.bdd.serenity 上执行目标 org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile): Compilation failure: Compilation failure:

[错误] /Users/pnutala/eclipse-photon-workspace/com.transunion.datahub.ui.qc.java.bdd.serenity/src/main/java/com/transunion/qc/steplibrary/datahub/DeCoherentUser.java: [7,35] 包 org.assertj.core.api 不存在

[错误] /Users/pnutala/eclipse-photon-workspace/com.transunion.datahub.ui.qc.java.bdd.serenity/src/main/java/com/transunion/qc/steplibrary/datahub/DeCoherentUser.java: [7,1] 仅从类和接口静态导入 [错误] -> [帮助 1]

试过了Mvn clean installverify没有成功。

 import static org.assertj.core.api.Assertions.assertThat;

 @Step
 public void landedOnListPage(String expectedTotle) {

assertThat(currentListPage.getTitle()).containsIgnoringCase(expectedTotle);
Run Code Online (Sandbox Code Playgroud)

java maven assertj

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

如何断言某个字符串至少包含 List &lt;String&gt; 中的一个值?

我正在使用 Java 和 AssertJ 测试一些 UI 功能。因此,当我从 UI 收到一些大字符串时,我应该验证该字符串是否至少包含一个来自List<String>. 做相反的事情很容易 - 验证列表是否至少包含一次某个字符串值,但这不是我的情况。我在标准方法中找不到解决方案。

public static final List<String> OPTIONS = Arrays.asList("Foo", "Bar", "Baz");

String text = "Just some random text with bar";
Run Code Online (Sandbox Code Playgroud)

我需要的是这样的:

Assertions.assertThat(text)
                .as("Should contain at least one value from OPTIONS ")
                .containsAnyOf(OPTIONS)
Run Code Online (Sandbox Code Playgroud)

java testing assertion assertj

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

如何使用 AssertJ 验证静态方法抛出异常?

当我尝试测试此方法时

    static void validatePostcode(final String postcode, final String addressLine)
    {
        if(! hasValidPostcode(postcode, addressLine)) {
            throw new InvalidFieldException("Postcode is null or empty ");
        }
    }
Run Code Online (Sandbox Code Playgroud)

使用以下测试

    @Test
    public void testThrowsAnException()
    {
        assertThatThrownBy(validatePostcode("", "")).isInstanceOf(InvalidFieldException.class);
    }
Run Code Online (Sandbox Code Playgroud)

我在 IntelliJ 中收到此错误消息

断言中的 assertThatThrownBy (org.assertj.core.api.ThrowableAssert.ThrowingCallable) 不能应用于 (void)

 
assertThatExceptionOfType.

是否可以使用 AssertJ 测试该静态方法实际上引发了未经检查的异常?我应该在考试中改变什么?

java static unit-testing exception assertj

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

Assertj验证集合中每个项目的字段始终为空

我正在寻找一种解决方案,以检查集合中的每个项目都具有expectedNullFieldnull 字段。

以下内容不起作用:

assertThat(aCollection).extracting("expectedNullField").isNull();

请注意以下工作正常: assertThat(aCollection).extracting("expectedNotNullField").isNotNull();

有人帮我吗?

谢谢。

java assertj

4
推荐指数
2
解决办法
1835
查看次数

断言列表恰好包含一个满足条件的元素

在我的 JUnit 测试中,我想断言列表中恰好包含一个满足给定条件的元素(列表中可以有很多元素,但只有一个元素应该满足条件)。我写了下面的代码,但我想知道是否可以去掉“new Condition<>”部分并使用“纯”lambda?或者还有其他更优雅的方法来完成我想做的事情吗?

class Foo {
  String u;

  Foo(String u) { this.u = u; }

  String getIt() { return u; }
}

@Test
public void testIt() {
  List<Foo> list = Lists.newArrayList(new Foo("abc"), new Foo("xyz"));

  assertThat(list)
        .haveExactly(1, new Condition<>(
                x -> "xyz".equals(x.getIt()),
                "Fail"));
}
Run Code Online (Sandbox Code Playgroud)

java junit junit4 java-8 assertj

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

如何在 AssertJ 中链接多个 assertThat 语句

下面是一个例子:

assertThat(commentById.getId()).isNotNull();
assertThat(commentById.getContent()).isNotBlank();
assertThat(commentById.getAuthor()).isNotNull();
assertThat(commentById.getAuthor().getUsername()).isNotBlank();
assertThat(commentById.getAuthor().getAvatar()).isNotBlank();
assertThat(commentById.getAuthor().getId()).isNotNull();
Run Code Online (Sandbox Code Playgroud)

反正有没有把它链接成一个assertThat语句


抱歉,问题不清楚。我的意思是,是否有一些流畅的方法调用可以将多个 assertThat 语句链接在一起。这是我能想到的一个例子:

assertThat(commentById)
.isNotNull()
.and(Comment::getID).isNotNull()
.and(Comment::getContent).isNotBlank()
.and(Comment::getAuthor).is(author->{
         author.isNotNull()
        .and(User::getID).isNotNull()
        .and(User::getAvatar).isNotBlank()
        .and(User::getUsername).isNotBlank()
});
Run Code Online (Sandbox Code Playgroud)

assertj

4
推荐指数
2
解决办法
1156
查看次数

仅忽略 AssertJ 中的嵌入成员

我有两个类要使用JUnit/进行测试Mockito

 public class ClassA {

    private int sk;
    // getters and setters

} 


 public class ClassB {

    private int sk;
    private List<ClassA> lista;

    // getters and setters

} 
Run Code Online (Sandbox Code Playgroud)

然后在我的测试课中,使用AssertJ

   List<ClassA> lista = //... populated with list of objects of ClassA

   ClassB expected = new ClassB();
   expected.setSk(5);
   expected.setLista(lista);

   ClassB actual = getItFromTheClassToTest();   

   assertThat(actual).usingRecursiveComparison()
                    .ignoringFields("sk")  // need to ignore only classA.sk
                    .isEqualTo(expected);
Run Code Online (Sandbox Code Playgroud)

问题是该名称sk在两个类中都存在,我只需要在 中忽略它ClassA,而不是在ClassB. 这可能吗AssertJ

java junit mockito assertj

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

在对象列表上调用提取后,如何检查没有值为空?

在单元测试中使用 AssertJ,我想从此类对象的列表中提取自定义对象的多个属性,extracting并检查它们是否全部非空。

例如,假设我想提取fieldA和:fieldBMyObject

import static from org.assertj.core.api.Assertions.assertThat;

List<MyObject> theList = ...; 
assertThat(theList).extracting("fieldA", "fieldB")).isNotNull();
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚正在检查的内容。

正在isNotNull检查:

  1. 返回的iterableextracting不为空?
  2. 列表中没有元组为空?
  3. 每个元组中的每个值都不为空?

java assertj

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

标签 统计

assertj ×10

java ×9

junit ×3

assertion ×1

exception ×1

java-8 ×1

junit4 ×1

maven ×1

mockito ×1

static ×1

testing ×1

unit-testing ×1