是否可以在Java AssertJ中编写多条件断言,如果满足至少一个条件,则会通过?(类似于OR运算符)

我想要这样的东西:

assertThat(listOfStrings)
           .satisfiesAnyOf(
                 a -> Assertions.assertThat(listItem).matches(someRegex),
                 // OR
                 b -> Assertions.assertThat(listItem).equals(someString)
            );

断言将接收字符串列表,并将对照Regexequals another string判断列表的每个元素,列表的所有元素应该至少满足一个条件,在这种情况下-断言应该通过.

如有任何帮助,不胜感激!

我试了很多办法,但没有一个是完美的.

推荐答案

我们到了.您可以随心所欲地将containsmatchesRegex个方法放入变量中!

package org.example.test;

import org.junit.jupiter.api.Test;

import java.util.ArrayList;
import java.util.function.Predicate;
import java.util.regex.Pattern;

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

public class MultipleConditionsTest {
    @Test
    public void test() {
        // Given
        String someString = "", regex = "";
        // When
        ArrayList<String> actual = new ArrayList<>();
        // Then
        assertThat(actual)
                .anyMatch(contains(someString).or(matchesRegex(regex)));
    }

    private static Predicate<? super String> matchesRegex(String regex) {
        return string ->Pattern.compile(regex).matcher(string).matches();

    }

    private static Predicate<String> contains(String someString) {
        return string -> string.equalsIgnoreCase(someString);
    }
}

你可以随心所欲地组合,像这样

@Test
public void containsOrMatchesRegexTest() {
    // Given
    // When
    List<String> fruits = Arrays.asList("banana", "apple", "orange");
    // Then
    assertThat(fruits)
            .as("At least one element should contain 'raspberry' or match the regex 'a.+?'")
            .anyMatch(contains("raspberry").or(matchesRegex("a.+?")))
            .as("At least one element should contain 'banana' or match the regex 'p.+?'")
            .anyMatch(contains("banana").or(matchesRegex("p.+?")))
            .as("No element should contain 'blueberry' or match the regex '.+?c.+?'")
            .noneMatch(contains("blueberry").or(matchesRegex(".+?c.+?")))
    ;
}

Java相关问答推荐

JPackage-results已安装-如何添加系统属性?

Java字符串常数池困惑

使用Apache Poi MQLSlideShow,在XSLFTable表中,我们可以在文本段落后面的每个单元格中包含圆角矩形吗?

将成为一个比较者.比较…在现代Java中,编译器会对`CompareTo`方法进行优化吗?

弹簧靴和龙目岛

使用联接和分页的SpringBoot Spring数据JPA

如何创建一个2d自上而下的移动系统,其中移动,同时持有两个关键是可能的处理?

为什么Java Annotation接口覆盖对象类中的方法

无法使用ApacheSpark依赖项构建JavaFX应用程序

将响应转换为带值的键

我怎样才能让IntelliJ标记toString()的任何实现?

Java中不兼容的泛型类型

项目react 堆中doOnComplete()和Subscribe()的第三个参数之间的差异

使用迭代器遍历HashMap不会因IF条件而停止

Java返回生成器的实现

当我try 返回可选时,Mock无法正常工作

在JPanel上使用GridBagLayout并将JButton放在里面时出现问题

如何在 Android Studio 中删除 ImageView 和屏幕/父级边缘之间的额外空间?

移动二维数组的行

ChromeDriver 版本 117+ 强制另存为对话框 - 如何绕过? (selenium/Java)