标签: assertj

assertThat() 总是成功的

我有一个在应该时不会失败的测试:

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

@Test
public void testTransactionResponse() {
    String id= "004";
    long amount= 5000001L;
    TransactionResource transactionResource = buildTransactionResource(amount, "EUR");
    System.out.println(transactionController.create(id, transactionResource).getStatusCode()); //the output is 403
    assertThat(transactionController.create(id, transactionResource).getStatusCode().equals(200)); //is true and test doesn't fail
}
Run Code Online (Sandbox Code Playgroud)

这怎么可能?

junit assert assertj

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

AssertJ:调用提取后的FlatMap列表

所以我有一个字符串/字符串列表对,我想要做的是提取后,将返回的列表合并到一个列表中,我可以执行更多的断言:

MyTest.java

Map<String, List<String>> testMap  = new HashMap<>();
List<String> nameList = newArrayList("Dave", "Jeff");
List<String> jobList = newArrayList("Plumber", "Builder");
List<String> cityList = newArrayList("Dover", "Boston");

testMap.put("name", nameList);
testMap.put("job", jobList);
testMap.put("city", cityList);

assertThat(testMap).hasSize(3)
    .extracting("name", "city")
    //not sure where to go from here to flatten list of lists
    // I want to do something like .flatMap().contains(expectedValuesList)
Run Code Online (Sandbox Code Playgroud)

当我调用extract时,它会将列表值拉出到列表列表中,这很好,但是之后我不能调用flatExtracting,因为没有要传入的属性名称,而且从我看过的内容看起来似乎并不好像自定义提取器是合适的(否则我不完全确定如何把它放在一起).有没有另一种方法可以平息我回来的列表清单?我可以去一个稍长的路径并在列表列表上做断言,或者在断言之前使用lambda来收集结果但是我想将断言保持为一个(例如,一些映射断言然后链接一些断言的内容)

java java-8 assertj

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

无法解析符号“断言”&lt;-- 尝试在 IntelliJ 中使用 AssertJ 时的错误消息

与其他一些问题类似,我发现 IntelliJ 神秘地拒绝识别 AssertJ 库。我再次询问,因为(a)我尝试了各种建议,并且(b)我有一个非常简单的例子,任何人都可以尝试自己。

在 IntelliJ 2018 和 IntelliJ 2019 预发布版中,我使用 Maven 原型maven-archetype-quickstart版本 1.4创建了一个新项目。

AssertJ 3 需要 Java 8。所以我将 POM 中的这两行更改为1.7to 11

    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>
Run Code Online (Sandbox Code Playgroud)

我将其添加到 POM 中:

    <dependency>
        <groupId>org.assertj</groupId>
        <artifactId>assertj-core</artifactId>
        <version>3.11.1</version>
        <scope>test</scope>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

使用IntelliJ 中的Maven面板,我执行了一个cleaninstall.

看起来不错。我验证org.assertj:assertj-core:3.11.1库出现在IntelliJ的项目面板中。应用程序运行,Hello World出现在 IntelliJ 的控制台上。

App.java文件中,我添加了这个import语句。

import static org.assertj.core.api.Assertions.* ; 
Run Code Online (Sandbox Code Playgroud)

IDE 编辑器中报告的错误:

无法解析符号“断言”

有些人建议损坏的 Maven 缓存。所以我退出了 IntelliJ,并删除了.m2我的主文件夹中的文件夹。我在 IntelliJ 中重新打开我的项目,并重新执行 Maven clean …

java intellij-idea maven assertj

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

如何在 Set 的 Assertj 集合中进行验证

我有返回记录列表的方法。每条记录都有设置为字段。

public class R {
    public final Set s;
}
Run Code Online (Sandbox Code Playgroud)

我有所有预期集合的列表 - 例如:

Set<String> set1 = new HashSet<String>(); set1.add("s1");
Set<String> set2 = new HashSet<String>(); set1.add("s2");
Set<String> set3 = new HashSet<String>(); set1.add("s3");
Run Code Online (Sandbox Code Playgroud)

我想使用 AssertJ (版本 3.11.1)以简单的方式验证响应List<R>包含所有定义的 Set 或至少这些集合中所有元素的聚合等于集合中元素的聚合set1, set2, set3

注意:以下解决方案不起作用

Set allElements = new HashSet<String>();
allElements.addAll(set1);
allElements.addAll(set2);
allElements.addAll(set3);

List<R> result = foo();
org.assertj.core.api.Assertions.assertThat(result)
    .extracting(record -> record.s)
    .containsOnly(allElements);
Run Code Online (Sandbox Code Playgroud)

我有:

java.lang.AssertionError: 
Expecting:
  <[["s1.1", "s1.2"],
    ["s2.1", "s2.2"],
    ["s3.1", "s3.2"]]>
to contain only:
  <[["s1.1",
    "s1.2",
    "s2.1",
    "s2.2",
    "s3.1", …
Run Code Online (Sandbox Code Playgroud)

java testing assertj

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

Assertj 3.16.1 中是否弃用了方法“hasOnlyElementsOfType”

我有这段代码在更新到 Assertj 3.16.1 后不再有效

Throwable thrown = catchThrowable(() -> myObject.methodThrowsException());
assertThat(thrown).isInstanceOf(MyCustomException.class).extracting("fault").hasOnlyElementsOfType(CustomException.class).extracting("code").containsExactly("AnotherCustomException");
Run Code Online (Sandbox Code Playgroud)

我收到此错误消息:

java:cannot find symbol
symbol: method hasOnlyElementsOfType(java.lang.Class<CustomException.class>)
location: class org.assertj.core.api.AbstractObjectAssert<capture#1 of?, capture#2 of ?>
Run Code Online (Sandbox Code Playgroud)

它要么已被弃用,要么现在以不同的方式实施。我已经浏览了文档并搜索了近两天,看看是否有任何关于如何使用它的信息,而不是以前如何使用它来实现轻松转换,但还没有找到任何东西。当我用它containsOnlyOnceElementsOf代替给出问题的那个时,我实际上得到了一个类似的错误。这些方法是否有其他替代方法可以实现相同的目的?

任何帮助将不胜感激!!!

java spring-test java-8 assertj junit5

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

AssertJ 无法在没有规模的情况下断言 BigDecimal 相等

我正在运行这样的断言:

assertThat(obj.getTotal()).isEqualTo(BigDecimal.valueOf(4))
Run Code Online (Sandbox Code Playgroud)

我正进入(状态

期望:<4.00> 等于:<4>

所以我试过了

assertThat(obj.getTotal()).isEqualTo(BigDecimal.valueOf(4.00))
Run Code Online (Sandbox Code Playgroud)

期望:<4.00> 等于:<4.0>

我找到了一种解决方法,在该方法中我将预期值的比例设置44.00,但我必须为测试中的所有 BigDecimal 变量这样做似乎很令人恼火。AssertJ 有没有我不知道的更好的方法?

java junit assertj

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

测试集合是否只有一个元素与谓词匹配

使用Assertj,我可以anyMatch用来测试集合是否至少有一个元素与谓词匹配,例如

var list = List.of("abc", "xyz")
assertThat(list).anyMatch(element -> element.endsWith("xyz"));
Run Code Online (Sandbox Code Playgroud)

但是我如何测试一个集合是否只有一个与谓词匹配的元素?

java assertj

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

AssertJ:从提取列表中检索第一项返回列表

我正在尝试验证提取列表中的第一项。然而 AssertJList从 中返回一个而不是预期的对象.first()

给出以下示例

public class AssertJTests
{
    @Test
    @DisplayName("Region Asia should only have one Country, Malaysia")
    public void assertRegion()
    {
        Region asia = new Region()
            .setName("Asia")
            .setCountries(Lists.newArrayList("Malaysia"));

        Consumer<Region> regionRequirement = region ->
            assertThat(region)
                .extracting(Region::getName)
                .containsOnly("Asia");

        Consumer<String> countryRequirement = country ->
            assertThat(country)
                .isEqualToIgnoringCase("Malaysia");

        assertThat(asia)
            .isInstanceOfSatisfying(Region.class, regionRequirement)
            .extracting(Region::getCountries)
            .hasSize(1)
            .first()
            .isInstanceOfSatisfying(String.class, countryRequirement);
}

    protected static class Region
    {
        private String name;

        private List<String> countries;

        List<String> getCountries()
        {
            return countries;
        }

        Region setCountries(final List<String> pCountries)
        {
            countries = …
Run Code Online (Sandbox Code Playgroud)

java assertj

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

在 Spring Boot 生产代码中使用 AssertJ

是否可以在 Spring Boot 生产代码中使用 AssertJ ?我设法在单元测试中使用它,但是'import static org.assertj.core.api.Assertions.*;' 无法在 src/main/java 文件夹的 java 文件中解析,即使我尝试通过更改构建路径并更改 junit.conf 来修复它。或者在生产代码中使用 AssertJ 是一种不好的做法?

unit-testing spring-boot assertj

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

如何使用 AssertJ 测试列表是否已排序

给定

List<Integer> list = ...
Run Code Online (Sandbox Code Playgroud)

我想用 AssertJ 测试它是否已排序。就像是:

assertThat(list).isSorted()
Run Code Online (Sandbox Code Playgroud)

是否可以?

java assertj

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