【问题标题】:How do I compare Integer and Long types with Junit?如何将 Integer 和 Long 类型与 Junit 进行比较?
【发布时间】:2021-09-30 06:32:51
【问题描述】:

如何将 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 是否相等?

最好的问候

【问题讨论】:

  • 你可以将 Integer 转换为 Long

标签: java spring unit-testing junit


【解决方案1】:

您可以通过java.lang.Integer#longValue 将 Integer 转换为 Long:

assertThat(poiList.get(0).get("id_pk").longValue()).isEqualTo(member.getId_pk());

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

【讨论】:

    【解决方案2】:

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

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

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

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

    【讨论】:

      【解决方案3】:

      两种方式:

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

      2. Java 的 Integer 类有一个.longvalue() method。

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

      【讨论】:

        【解决方案4】:

        这个怎么样:

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

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 2023-03-16
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多