这似乎不应该编译和运行,因为Object
没有fail()
方法。在编译时发生了一些奇怪的事情吗?(我正在使用 NetBeans):
import static org.junit.Assert.*;
import org.junit.Test;
public class Test {
@Test
public void hello() {
fail();
}
}
问候,
圭多
这似乎不应该编译和运行,因为Object
没有fail()
方法。在编译时发生了一些奇怪的事情吗?(我正在使用 NetBeans):
import static org.junit.Assert.*;
import org.junit.Test;
public class Test {
@Test
public void hello() {
fail();
}
}
问候,
圭多
您的import static
行将类的所有静态成员Assert
导入编译单元的静态命名空间。fail()
调用指的是Assert.fail()
。
您所遇到的关于 where 定义的困惑fail()
正是我通常不建议使用import static
. 在我自己的代码中,我通常导入类并使用它来调用静态方法:
import org.junit.Assert;
import org.junit.Test;
public class Test {
@Test
public void hello() {
Assert.fail();
}
}
更具可读性。
然而,正如JB Nizet 指出的那样import static
,使用JUnit 的断言是相当普遍的做法。当您编写和阅读足够多的 JUnit 测试时,知道断言方法的来源将成为第二天性。
这是完全正确的,它将运行和编译——我已经使用 eclipse 进行了检查。原因是静态导入:
import static org.junit.Assert.*;
从 org.junit.Assert 类中添加所有静态字段或方法 - 因此包括fail()方法。
然而,可能出现的问题是您的测试类的名称与注释的名称相同
@Test
因此它会产生一个错误:
导入 org.junit.Test 与同一文件中定义的类型冲突
出现此错误是因为您的类名和注释名称相同(Test)。将您的类名更改为“Test1”或Test以外的其他名称。