[英]Why does a call to fail() compile in a Java Class using JUnit
这似乎不应该编译和运行,因为Object
没有fail()
方法。 在编译时是一个时髦的事情发生? (我使用的是NetBeans):
import static org.junit.Assert.*;
import org.junit.Test;
public class Test {
@Test
public void hello() {
fail();
}
}
问候,
圭多
import static
行将Assert
类的所有静态成员import static
到编译单元的静态名称空间中。 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指出的那样 ,对JUnit的断言使用import static
是很常见的做法。 当你编写和阅读足够多的JUnit测试时,知道断言方法的来源将成为第二天性。
这是完全正确的,它将运行和编译 - 我已经使用eclipse进行了检查。 原因是静态导入:
import static org.junit.Assert.*;
它添加了org.junit.Assert类中的所有静态字段或方法 - 因此包括fail()方法。
然而,可能出现的问题是测试类的名称与注释的名称相同
@Test
因此会产生错误:
导入org.junit.Test与同一文件中定义的类型冲突
此错误即将发生,因为您的类名和注释名称相同(测试)。将您的类名更改为“Test1”或Test以外的名称。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.