当前位置: 首页 > 知识库问答 >
问题:

AssertJ:使用自定义比较器的流畅排序测试

卓致远
2023-03-14

让我们假设我有一个类foo,它不实现carable,还有一个foocomparator类,它实现comparator

使用AssertJ的fluent API,我现在假设可以执行以下操作:

Foo foo1 = ...;
Foo foo2 = ...;
FooComparator fooComparator = ...;
assertThat(foo1).usingComparator(fooComparator).isGreaterThan(foo2);

由于foo不实现可比,AssertThat(foo1)将返回ObjectAssert 类型,并且由于usingcomparator也返回ObjectAssert ,所以我无法访问IsgreaterThanIslessThan方法,这些方法在ComparableAssert接口中声明。

objectassert .usingcomparator 'only'返回objectassert 而不返回comparableassert 有什么原因吗?

当然,我可以按照assertthat(foocomparator.compare(foo1,foo2)).isgreaterthan(0)的内容重写上面的断言,但是表达式本身并不特别易读,而且如果出现故障,生成的消息('expected:<-1>大于:<0>)不会提到导致断言失败的foo1和foo2中的实际数据。

是否有一种方法可以用内置的AssertJ API流畅地表达这种情况,而不必实现专有的扩展或包装器?

共有1个答案

赫连鸿振
2023-03-14

目前,您不能在usingcomparator之后返回comparableassert ,因为abstractcomparableassert要求实际类型foocarparableAbstractComparableAssert声明如下:

AbstractComparableAssert<SELF extends AbstractComparableAssert<SELF, ACTUAL>,
                         ACTUAL extends Comparable<? super ACTUAL>>

我不确定这是否有帮助,但我无论如何都会提到它,你可以写:

assertThat(asList(foo1, foo2)).isSortedAccordingTo(fooComparator);
 类似资料:
  • 问题内容: 我想为汽车清单开发一个排序演示。我正在使用数据表显示汽车列表。现在实际上我想按汽车颜色对列表进行排序。这里不是按字母顺序排序的。我想使用我的自定义排序顺序,例如先是红色汽车,然后是蓝色,等等。 为此,我尝试使用,但它只允许按字母顺序排序。 因此,任何人都可以指导我实现使用该技术的方法,以便使排序变得更快。 问题答案: 我建议你为汽车颜色创建一个枚举,而不要使用字符串,并且枚举的自然顺序

  • 如何使用Comparator对对象的ArrayList进行正确排序,然后将排序后的数组传递给自定义数组适配器? 我试过这样做: ArrayList的内容类: 比较器: 在OnCreate中设置适配器: ...因为我使用的是定制的ArrayAdapter,就像: 我需要如何修改此适配器以使其与其他适配器一起工作? 谢谢你的帮助。

  • 我正在使用Android应用程序,我想以某种方式打印HashMap的键和值。假设以下是HashMap的内容: 我想以这样一种方式打印HashMap键和值,即字母键首先按字母顺序打印,然后是数字键按升序打印: 我现在做的是: > < li> 获取密钥集并将其保存到数组列表中 使用比较器对数组列表进行排序 使用排序列表打印出地图中的值 这是我的代码: 到目前为止,它还在工作,但是在某些情况下,我没有得

  • 问题内容: 我想使用比较器按降序对对象进行排序。 在这里,我想对一个Person对象数组进行排序。 我怎样才能做到这一点? 问题答案: 你可以使用这种方法来覆盖用户定义的类的降序方法,从而覆盖compare()方法, 或通过使用用户Prince在其评论中提到的降序进行排序。 你可以像这样进行升序排序, 我们用简洁的Lambda表达式(从Java 8开始)替换上面的代码: 从Java 8开始,Lis

  • 我有以下清单: 这是我的比较器函数: 我正在尝试使用它排序如下: 我不明白为什么第一个NaN不在列表的末尾。 我对升序排序列表的预期输出是: 我对降序排序列表的预期输出是: 在升序排序和降序排序的情况下,我希望NaNs在最后。 我知道sortwith使我们能够编写自己的比较器。有人能帮我吗?

  • 下面的代码片段适用于条件1,但不适用于条件2。