使用导入静态org.junit.jupiter.api.Assertions。*时,“ assertEquals(boolean,Boolean)对于该类型不明确”。

时间:2019-05-20 01:12:49

标签: java junit5

尝试将这种类型的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(""));

    }

}

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

断言某物是false的情况也一样:在此类用例中使用assertFalse(...)

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

答案 1 :(得分:0)

很可能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(...)