Java编写自定义AssertJ断言

位置:首页>文章>详情   分类: Java教程 > 编程技术   阅读(89)   2024-05-25 16:21:46

AssertJ 是广泛使用的 Hamcrest 匹配器的替代匹配库。事实上,对于我自己的项目,我已经改为仅使用 AssertJ⟩——⟩我只是发现流畅的界面和可扩展性非常吸引人。

您可以按如下方式编写自定义断言:

想象一下具有浓度和饮品类型的咖啡,例如 EspressoLatte。自定义 CoffeeAssert 根据其自定义业务逻辑验证咖啡实例⟩——在本例中为它们的属性。

public class CoffeeAssert extends AbstractAssert<CoffeeAssert, Coffee> {

    public CoffeeAssert(Coffee actual) {
        super(actual, CoffeeAssert.class);
    }

    public static CoffeeAssert assertThat(Coffee actual) {
        return new CoffeeAssert(actual);
    }

    public CoffeeAssert hasType(Coffee.Type type) {
        isNotNull();

        if (actual.getType() != type) {
            failWithMessage("Expected the coffee type to be <%s> but was <%s>", type, actual.getType());
        }

        return this;
    }

    // hasStrength(Strength) omitted ...

    public CoffeeAssert isNotDecaf() {
        isNotNull();

        if (actual.getStrength() == Coffee.Strength.DECAF) {
            failWithMessage("Expected a coffee but got decaf!");
        }

        return this;
    }
}

然后可以使用自定义断言简单地验证 Coffee 实例。 assertThat 的静态导入必须引用 CoffeeAssert

import static com.example.coffee.CoffeeAssert.assertThat;
...

Coffee coffee = new Coffee();
coffee.setStrength(Strength.STRONG);
coffee.setType(Type.ESPRESSO);

assertThat(coffee)
    .hasType(Type.ESPRESSO)
    .isNotDecaf();

使用自定义断言可以极大地提高测试代码的质量。

这篇文章转自我的时事通讯第 012 期

觉得帖子有用?订阅我的时事通讯以获取更多有关 IT 和 Java 的免费内容、提示和技巧:

标签2: Java教程 AssertJ
地址:https://www.cundage.com/article/jcg-write-custom-assertj-assertions.html

相关阅读

AssertJ 是广泛使用的 Hamcrest 匹配器的替代匹配库。事实上,对于我自己的项目,我已经改为仅使用 AssertJ⟩——⟩我只是发现流畅的界面和可扩展性非常吸引人。
学习使用 XmlUnit 附带的 XmlAssert 来验证 XML 文档、测试 XPath 表达式并断言 XML 节点或值图书馆。这是使用 XmlAssert 的快速参考。 import st...
使用类似 BDD 的语法、Java 8 和 Mockito-AssertJ duo 调整 Idea 的 JUnit 测试类模板。 本文涵盖的主题可能看起来微不足道。但是,根据我的培训师 经验,我...
JUnit 5 对断言库进行了大量改进,这主要归功于 Java 8 和 Lambda 表达式的支持,以及新断言的出现,例如 assertAll、assertTimeout 或 assertThr...
Spring Boot GenericApplicationContext 教程展示了如何在 Spring 应用程序中使用 GenericApplicationContext。在示例中,我们创建...
介绍 Java 的最后几个版本即 Java 7、Java 8 和即将发布的 Java 9 具有相当多的功能,使 Java 开发人员的工作更加轻松。 (我知道 Java 9 会让它变得更难,但前提...
Java HashSet 教程展示了如何使用 Java HashSet 集合。 Java哈希集 HashSet 是一个不包含重复元素的集合。此类为基本操作(添加、删除、包含和大小)提供恒定时间性...
SpringApplicationBuilder 教程展示了如何使用 SpringApplicationBuilder 创建一个简单的 Spring Boot 应用程序。 春天 是用于创建企业应...
通道是继 buffers 之后 java.nio 的第二个主要新增内容,我们在之前的教程中已经详细了解了这一点。通道提供与 I/O 服务的直接连接。 通道是一种在字节缓冲区和通道另一端的实体(通...
JUnit 5 带来了非常棒的改进,并且与它的前身有很大不同。 JUnit 5 在运行时需要 Java 8,因此 Lambda 表达式可用于测试,尤其是断言。其中一个断言非常适合测试异常。 设置...