对于注释类型测试,未定义预期属性

时间:2018-03-28 15:01:13

标签: java unit-testing

您好我正在尝试测试具有异常的代码,但是当我尝试测试它时 它表示注释类型测试

未定义预期属性
package Lab1;

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

import org.junit.jupiter.api.Test;

import junit.framework.Assert;

class MyMathTest {
    MyMath m = new MyMath();
    @Test
    void testDiv() {
        int actual = m.div(6, 2);
        int expected = 3;
        assertEquals(expected, actual);
    }
    /* the error is in the upcoming line*/
    @Test (expected = IllegalArgumentException.class)
    public void testDivException(){
        m.div(5, 0);
    }

}

这是错误消息

  

注释类型测试

未定义预期属性

2 个答案:

答案 0 :(得分:6)

您正在使用JUnit 5但尝试使用JUnit 4的功能。不要混合它们。

import org.junit.jupiter.api.Test;

JUnit5中的@Test注释不支持您尝试使用的内容。

要断言异常,您需要执行

Assertions.assertThrows(IllegalArgumentException.class, () -> m.div(5, 0));

不要忘记导入包org.junit.jupiter.api.Assertions

更多关于JUnit 5

答案 1 :(得分:0)

您使用的JUnit 4功能正确无误。

@Test (expected = IllegalArgumentException.class)
public void testDivException(){
    m.div(5, 0);
}

但是由于看到导入后,我可以告诉您正在使用JUnit 5进行测试,所以我想告诉您上述方法将不起作用。由于JUnit具有自己的 Assertions 类来处理相同的问题。我会告诉你如何。

@Test
public void testDivException() {

    Assertions.assertThrows(IllegalArgumentException.class, new Executable() {

        @Override
        public void execute() throws Throwable {

            m.div(5, 0);

        }
    });
}

以上实现将在Java 7及更高版本上运行。现在,如果您想在Java 8中使用Lambda Expression做相同的事情,请执行以下操作:

@Test
public void testDivException(){
    Assertions.assertThrows(IllegalArgumentException.class, () -> m.div(5, 0));
}

您可以阅读有关Assertion类和JUnit5 here的更多信息。