我如何将 Integer 和 Long 类型与 Junit 进行比较?

How do I compare Integer and Long types with Junit?

如何将 Integer 和 Long 类型与 Junit 进行比较?

assertThat(poiList.get(0).get("id_pk")).isEqualTo(member.getId_pk());的结果是:

org.opentest4j.AssertionFailedError:
expected: 1L
but was : 1
Expected :1L
Actual :1

两种类型是:

log.info("getClass1: {}", poiList.get(0).get("id_pk").getClass());
         log.info("getClass2: {}", member.getId_pk().getClass());
2021-09-30 15:29:08.904 INFO 19504 --- [ main] c.p.i.domain.item.ItemServiceTest : getClass1: class java.lang.Integer
2021-09-30 15:29:08.904 INFO 19504 --- [ main] c.p.i.domain.item.ItemServiceTest : getClass2: class java.lang.Long

如何比较 1 和 1L 是否相等?

此致

您可以通过 java.lang.Integer#longValue:

将 Integer 转换为 Long
assertThat(poiList.get(0).get("id_pk").longValue()).isEqualTo(member.getId_pk());

但要注意空指针,如果 poiList.get(0).get("id_pk") 为空,则会抛出空指针异常!

看起来应该在实体级别进行更正,因为如果我们说 poiList.get(0).get("id_pk") 等于 member.getId_pk() 那么逻辑上它们的数据类型也应该相同。

作为首选解决方案,您应该在实体级别更正它。

但是,如果您仍想断言它,请先将 int 转换为 long,然后再对其断言。

poiList.get(0).get("id_pk").longValue()

两种方式:

  1. Java 的 Long class 有一个 .intValue() method 返回一个 int。

  2. Java 的整数 class 有一个 .longvalue() method.

我会推荐第二种,因为 long 可以取比 int 更大的值范围。

这个怎么样:

assertThat(new BigDecimal(1)).isEqualTo(new BigDecimal(1L));

如所有答案所示,您需要更改一个参数的类型。或许都改成 String 也是个好主意。

 assertThat(String.valueOf(1L)).isEqualTo(String.valueOf(1))