为什么使用JUnit调用fail()在Java类中进行编译

时间:2013-03-02 17:53:57

标签: java unit-testing netbeans junit

这似乎不应该编译并运行,因为Object没有fail()方法。在编译时是一个时髦的事情发生? (我正在使用NetBeans):

import static org.junit.Assert.*;
import org.junit.Test;

public class Test {

    @Test
    public void hello() {
        fail();

    }
}

此致

3 个答案:

答案 0 :(得分:18)

您的import static行将Assert类的所有静态成员导入到编译单元的静态命名空间中。 fail()来电是指Assert.fail()

您在fail()定义位置时遇到的困惑正是我通常不建议使用import static的原因。在我自己的代码中,我通常导入类并使用它来调用静态方法:

import org.junit.Assert;
import org.junit.Test;

public class Test {

    @Test
    public void hello() {
        Assert.fail();
    }
}

更具可读性。

但是,作为JB Nizet points out,将import static用于JUnit的断言是相当普遍的做法;当你编写和阅读足够的JUnit测试时,知道断言方法的来源将成为第二天性。

答案 1 :(得分:6)

这是完全正确的,它将运行和编译 - 我已经使用eclipse进行了检查。 原因是静态导入:

import static org.junit.Assert.*;

添加org.junit.Assert类中的所有静态字段或方法 - 因此包括 fail()方法。

然而,可能出现的问题是测试类的名称与注释的名称相同

@Test

因此会产生错误:

  

导入org.junit.Test与同一文件中定义的类型冲突

答案 2 :(得分:0)

此错误即将发生,因为您的类名和注释名称相同(测试)。请将您的班级名称更改为' Test1'或者不是测试。