在 Java 中使用 AssertJ 提取值
瀏覽人數:169最近更新:
一、概述
AssertJ是 Java 的斷言庫,它使我們能夠流暢地編寫斷言,並使其更具可讀性。
在本教程中,我們將探索 AssertJ 的提取方法,以便在不中斷測試斷言流程的情況下流暢地進行檢查。
2.實施
讓我們從一個Person
示例類開始:
class Person {
private String firstName;
private String lastName;
private Address address;
Person(String firstName, String lastName, Address address) {
this.firstName = firstName;
this.lastName = lastName;
this.address = address;
}
// getters and setter omitted
}
每個Person
都將與一些Address:
class Address {
private String street;
private String city;
private ZipCode zipCode;
Address(String street, String city, ZipCode zipCode) {
this.street = street;
this.city = city;
this.zipCode = zipCode;
}
// getters and setter omitted
}
每個Address
都將包含一個ZipCode
作為一個類:
class ZipCode {
private long zipcode;
ZipCode(long zipcode) {
this.zipcode = zipcode;
}
// getters and setter omitted
}
現在假設在創建一個Person
對像後,我們需要測試以下情況:
-
Address
不為null
- 該
Address
不在受限地址列表中 -
ZipCode
對像不為null
-
ZipCode
值介於 1000 和 100000 之間
3.使用AssertJ的常見斷言
給定以下Person
對象:
Person person = new Person("aName", "aLastName", new Address("aStreet", "aCity", new ZipCode(90210)));
我們可以提取Address
對象:
Address address = person.getAddress();
然後我們可以斷言Adress
不為空:
assertThat(address).isNotNull();
我們還可以檢查該Address
是否不在受限地址列表中:
assertThat(address).isNotIn(RESTRICTED_ADDRESSES);
下一步是檢查ZipCode
:
ZipCode zipCode = address.getZipCode();
並斷言它不為空:
assertThat(zipCode).isNotNull();
最後,我們可以提取ZipCode
值並斷言它在 1000 到 100000 之間:
assertThat(zipCode.getZipcode()).isBetween(1000L, 100_000L);
上面的代碼很簡單,但我們需要幫助才能流暢地閱讀它,因為它需要多行處理。我們還需要分配變量以便稍後能夠對它們進行斷言,這不是一種干淨的代碼體驗。
4.使用AssertJ的提取方法
現在讓我們看看提取方法如何幫助我們:
assertThat(person)
.extracting(Person::getAddress)
.isNotNull()
.isNotIn(RESTRICTED_ADDRESSES)
.extracting(Address::getZipCode)
.isNotNull()
.extracting(ZipCode::getZipcode, as(InstanceOfAssertFactories.LONG))
.isBetween(1_000L, 100_000L);
正如我們所看到的,代碼並沒有太大的不同,但它很流暢,也更容易閱讀。
5.結論
在這篇文章中,我們能夠看到兩種提取對象值以斷言的方法:
- 提取到稍後斷言的變量中
- 使用AssertJ的提取方法以流暢的方式提取
本文中使用的示例可以在 GitHub 上找到。
本作品係原創或者翻譯,採用《署名-非商業性使用-禁止演繹4.0國際》許可協議