AssertJ:如何使用compareTo和extracting()来断言BigDecimals

jhy*_*yot 3 java assertj

我将 AssertJextracting()方法与 Java8 lambda 一起使用,并将一些字段映射到 BigDecimal,然后断言结果数组。但我需要使用 BigDecimalcompareTo()和不使用BigDecimal 进行比较equals()(因此。我怎样才能做到这一点?

例子:

Actual actual = performTest();

Assertions.assertThat(actual)
  .extracting(
    Actual::getName,   // returns String
    Actual::getValue  // returns BigDecimal
  )
  .containsExactly(
    "abc",                 // ok, String equals comparison
    new BigDecimal("1.1")  // NOT OK, equals comparison, but I need compareTo comparison
  );
Run Code Online (Sandbox Code Playgroud)

编辑:我正在寻找一种流畅的方法来执行此操作,因为我当然可以将其拆分为多个不同的断言并以这种方式进行比较,或者将所有内容放入一个巨大的Condition.

Mat*_*bin 11

您可以使用BigDecimalComparator,例如:

Actual actual = performTest();
Assertions.assertThat(actual)
.extracting(
  Actual::getName,   // returns String
  Actual::getValue  // returns BigDecimal
)
.usingComparatorForType(BigDecimalComparator.BIG_DECIMAL_COMPARATOR, BigDecimal.class)
.containsExactly("abc",  new BigDecimal("1.1"));
Run Code Online (Sandbox Code Playgroud)

  • 太棒了。但是,在使用它时,请注意实际创建一个新的“BigDecimal”,如示例中所示。我使用的是“BigDecimal.TEN”,它不起作用,但是当从字符串值创建一个时,它就像一个魅力。 (2认同)