Gui*_*lmi 4 java junit unit-testing netbeans
这似乎不应该编译和运行,因为Object没有fail()方法.在编译时是一个时髦的事情发生?(我使用的是NetBeans):
import static org.junit.Assert.*;
import org.junit.Test;
public class Test {
@Test
public void hello() {
fail();
}
}
Run Code Online (Sandbox Code Playgroud)
问候,
圭多
Pla*_*ure 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();
}
}
Run Code Online (Sandbox Code Playgroud)
更具可读性.
但是,正如JB Nizet指出的那样,使用import staticJUnit的断言是相当普遍的做法; 当你编写和阅读足够多的JUnit测试时,知道断言方法的来源将成为第二天性.
这是完全正确的,它将运行和编译 - 我已经使用eclipse进行了检查.原因是静态导入:
import static org.junit.Assert.*;
Run Code Online (Sandbox Code Playgroud)
它添加了org.junit.Assert类中的所有静态字段或方法 - 因此包括fail()方法.
然而,可能出现的问题是测试类的名称与注释的名称相同
@Test
Run Code Online (Sandbox Code Playgroud)
因此会产生错误:
导入org.junit.Test与同一文件中定义的类型冲突