配置AssertJ
有三种方式配置AssertJ
:一种是通过Assertions
类的静态配置方法,另一种是修改Configuration
对象实例,最后一种是编写自己的Configuration
子类并注册到AssertJ
中。
无论哪种方法,必须确保配置发生在断言之前。
1. 配置单个属性
可以通过Assertions
类的各个静态配置方法分别设置配置属性:
Assertions.setAllowComparingPrivateFields(true);
Assertions.setAllowExtractingPrivateFields(false);
Assertions.setExtractBareNamePropertyMethods(false);
Assertions.setLenientDateParsing(true);
Assertions.setMaxElementsForPrinting(100);
Assertions.setMaxLengthForSingleLineDescription(250);
Assertions.setRemoveAssertJRelatedElementsFromStackTrace(true);
Assertions.useRepresentation(myRepresentation);
Assertions.registerCustomDateFormat(myCustomDateFormat);
Assertions.setPrintAssertionsDescription(true);
Assertions.setConsumerDescription(description -> writeToFile(description, report));
Representation
可以注册一个定制的
Representation
类来控制显示在断言错误消息中的各种不同类型的格式。缺省值是StandardRepresentation
。AllowComparingPrivateFields
设置是否允许使用私有字段参与逐个字段/属性的比较。缺省值是
true
。AllowExtractingPrivateFields
设置是否允许对私有字段进行抽取操作。缺省值是
true
。ExtractBareNamePropertyMethods
设置是否允许对“纯名字”属性方法(例如name()方法)进行抽取。缺省值是
true
。LenientDateParsing
设置是否使用
lenient
格式作为缺省的日期/世间格式。Custom DateFormat
设置定制的日期/时间格式化类。
MaxElementsForPrinting
在错误消息中允许打印多少个集合/数组/map的元素。缺省值是1000。
MaxLengthForSingleLineDescription
在错误消息中当对集合/数组/map进行格式化时,将多个元素打印在一行,还是每个元素一行。缺省值是80。
RemoveAssertJRelatedElementsFromStackTrace
设置是否将
AssertJ
相关的元素从断言错误栈轨迹中剔除。
2. Configuration对象
从3.13.0
版开始,AssertJ
暴露一个org.assertj.core.configuration.Configuration
对象,提供对所有AssertJ
全局配置属性的属性访问。
可以创建org.assertj.core.configuration.Configuration
类的示例,通过各种setter
方法设置它的属性,最后调用applyAndDisplay()
方法使其生效:
Configuration configuration = new Configuration();
configuration.setBareNamePropertyExtraction(false);
configuration.setComparingPrivateFields(false);
configuration.setExtractingPrivateFields(false);
configuration.setLenientDateParsing(true);
configuration.setMaxElementsForPrinting(1001);
configuration.setMaxLengthForSingleLineDescription(81);
configuration.setRemoveAssertJRelatedElementsFromStackTrace(false);
// don't forget to apply it!
configuration.applyAndDisplay();
3. Configuration子类
可以创建自己的org.assertj.core.configuration.Configuration
子类,并注册到自动发现机制中。具体步骤:
- 创建你自己的
org.assertj.core.configuration.Configuration
子类。定义各种配置属性。 - 在
META-INF/services
目录下创建文本文件org.assertj.core.configuration.Configuration
。 - 在
META-INF/services``org.assertj.core.configuration.Configuration
文件中输入上述Configuration
子类的全限定类名。
下面是Configuration
子类的例子:
package example.core;
import static org.assertj.core.presentation.BinaryRepresentation.BINARY_REPRESENTATION;
import static org.assertj.core.util.Lists.list;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.List;
import org.assertj.core.configuration.Configuration;
import org.assertj.core.presentation.Representation;
class CustomConfiguration extends Configuration {
private static final SimpleDateFormat DATE_FORMAT1 = new SimpleDateFormat("yyyy_MM_dd");
private static final SimpleDateFormat DATE_FORMAT2 = new SimpleDateFormat("yyyy|MM|dd");
// we keep the default behavior for extractingPrivateFieldsEnabled since it is not overridden
@Override
public Representation representation() {
return BINARY_REPRESENTATION;
}
@Override
public boolean bareNamePropertyExtractionEnabled() {
return false;
}
@Override
public boolean comparingPrivateFieldsEnabled() {
return false;
}
@Override
public boolean lenientDateParsingEnabled() {
return true;
}
@Override
public List<DateFormat> additionalDateFormats() {
return list(DATE_FORMAT1, DATE_FORMAT2);
}
@Override
public int maxElementsForPrinting() {
return 2000;
}
@Override
public int maxLengthForSingleLineDescription() {
return 150;
}
}