Using Conditions with AssertJ Assertions
1.概述
在本教程中,我们将研究AssertJ库,特别是在定义和使用条件来创建可读和可维护的测试方面。
可以在这里找到AssertJ的基础知识。
2.被测课程
让我们看一下将针对其编写测试用例的目标类:
3.创建条件
我们可以通过简单地使用适当的参数实例化Condition类来定义断言条件。
创建条件的最方便方法是使用将谓词作为参数的构造函数。其他构造函数要求我们创建一个子类并覆盖matchs方法,该方法不太方便。
在构造一个Condition对象时,我们必须指定一个type参数,这是根据条件求值的值的类型。
让我们为会员类的年龄字段声明一个条件:
1 2 | Condition<Member> senior = new Condition<>( m -> m.getAge() >= 60,"senior"); |
现在,高级变量引用了一个Condition实例,该实例根据人员的年龄测试人员是否为高级。
构造函数的第二个参数是字符串" senior",是简短描述,如果条件失败,AssertJ自身将使用它来构建用户友好的错误消息。
检查人员是否具有名称" John"的另一个条件如下所示:
1 2 3 4 | Condition<Member> nameJohn = new Condition<>( m -> m.getName().equalsIgnoreCase("John"), "name John" ); |
4.测试用例
现在,让我们看看如何在我们的测试类中使用Condition对象。假设条件条件高级和姓名约翰可作为测试类中的字段使用。
4.1。声明标量值
当年龄值高于资历阈值时,以下测试应通过:
由于使用is方法的断言通过,因此使用带有相同参数的isNot的断言将失败:
1 2 | // assertion fails with an error message containing"not to be <senior>" assertThat(member).isNot(senior); |
使用nameJohn变量,我们可以编写两个类似的测试:
1 2 3 4 5 6 |
is和has方法以及isNot和dosNotHave方法具有相同的语义。我们使用的只是选择问题。但是,建议选择一种使我们的测试代码更具可读性的代码。
4.2。主张收藏
条件不仅适用于标量值,而且还可以验证集合中元素的存在或不存在。让我们看一个测试用例:
1 2 3 4 5 6 |
haveExactly方法断言满足给定条件的元素的确切数量,而doNotHave方法检查是否存在元素。
并不是唯一具有收集条件的方法hasExactly和doNotHave。有关这些方法的完整列表,请参见API文档中的AbstractIterableAssert类。
4.3。合并条件
我们可以使用Assertions类的三种静态方法来组合各种条件:
not –如果不满足指定条件,则创建满足条件
allOf –仅在满足所有指定条件时创建一个条件
anyOf –创建至少满足指定条件之一的条件
以下是not和allOf方法可用于组合条件的方法:
1 2 3 4 5 |
同样,我们可以使用anyOf:
1 2 3 4 5 |
5.结论
本教程提供了有关AssertJ条件以及如何使用它们在测试代码中创建可读性强的断言的指南。
可以在GitHub上找到所有示例和代码段的实现。