【问题标题】:"assertEquals(boolean, Boolean) is ambiguous for the type" when using import static org.junit.jupiter.api.Assertions.*; [duplicate]使用 import static org.junit.jupiter.api.Assertions.* 时,“assertEquals(boolean, Boolean) 类型不明确”; [复制]
【发布时间】:2019-10-06 08:57:28
【问题描述】:

尝试将这种类型的assertEqualsimport static org.junit.jupiter.api.Assertions.*; 一起使用时出错

使用import static org.junit.Assert.*;时没有错误

//import static org.junit.jupiter.api.Assertions.*;
import static org.junit.Assert.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
//import org.junit.Before;
//import org.junit.Test;

class isogramTest {
    //isogram Isogram;

    @BeforeEach
    void setUp() throws Exception {

    }

    @Test
    void test() {
        assertEquals(true, isogram.isIsogram("Dermatoglyphics"));
        assertEquals(true, isogram.isIsogram("isogram"));
        assertEquals(false, isogram.isIsogram("moose"));
        assertEquals(false, isogram.isIsogram("isIsogram"));
        assertEquals(false, isogram.isIsogram("aba"));
        assertEquals(false, isogram.isIsogram("moOse"));
        assertEquals(true, isogram.isIsogram("thumbscrewjapingly"));
        assertEquals(true, isogram.isIsogram(""));

    }

}

【问题讨论】:

  • 能否贴出方法isIsogram()的签名(返回类型)?
  • 你使用的是什么版本的 JUnit Jupiter?

标签: java junit5


【解决方案1】:

JUnit Jupiter 目前不明确支持以下语句。

    assertEquals(true, isogram.isIsogram("Dermatoglyphics"));

只要有这样的构造,就应该使用assertTrue(...),因为它正好存在于这样的用例中。

例如,将上面的内容更改为以下内容。

    assertTrue(isogram.isIsogram("Dermatoglyphics"));

同样适用于断言某事物是false:在此类用例中使用assertFalse(...)

如果您认为 JUnit Jupiter 应该在 assertEquals(...) 中为 booleanBoolean 提供明确的支持,请 open a ticket 提出建议。

【讨论】:

    【解决方案2】:

    isIsogram() 可能返回 Boolean 对象,而不是 boolean 原始值。 所以歧义介于:

    org.junit.jupiter.api.Assertions.assertEquals(boolean, boolean)
    org.junit.jupiter.api.Assertions.assertEquals(Object, Object)
    

    两者都可以应用,因为编译器可以自动装箱/拆箱原语/布尔对象。

    在 Junit4 中,

    org.junit.Assert
    

    没有任何assertEquals(boolean, boolean)方法,所以没有歧义。

    从 junit4 迁移到 junit5/jupiter 时可以解决的问题:

    • 使用assertTrue/assertFalse
    • 更改方法 isIsogram() 以返回原始 boolean
    • 使用Boolean.TRUE/Boolean.False进行比较
    • 使用显式转换(boolean) isIsogram(...)

    【讨论】:

      猜你喜欢
      • 2013-09-18
      • 2017-06-29
      • 1970-01-01
      • 2021-06-07
      • 1970-01-01
      • 2020-08-29
      • 2019-10-26
      • 2021-10-12
      • 2022-01-25
      相关资源
      最近更新 更多