配置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子类,并注册到自动发现机制中。具体步骤:

  1. 创建你自己的org.assertj.core.configuration.Configuration子类。定义各种配置属性。
  2. META-INF/services目录下创建文本文件org.assertj.core.configuration.Configuration
  3. 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;
  }
}

results matching ""

    No results matching ""