这似乎不应该编译并运行,因为Object
没有fail()
方法。在编译时是一个时髦的事情发生? (我正在使用NetBeans):
import static org.junit.Assert.*;
import org.junit.Test;
public class Test {
@Test
public void hello() {
fail();
}
}
此致
圭
答案 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'或者不是测试。