我有一个 Java 项目,在 Scala 中有 JUnit 测试。每个测试类都带有注释@Test
:
import org.junit.Test
@Test
class SomeTest {
...
}
JUnit API说这@Test
是一个方法注解。但是,当我从类中删除@Test
注释同时保持方法注释完整时,从 Eclipse 运行时不会执行许多测试。
那么将@Test
注释应用于类的目的是什么?为什么在删除这些注释后某些测试无法运行?
Scala 不检查ElementType
注释(即使在 Scala IDE 之外),因此 Scala 中的类的 @Test 注释没有“目的”。
事实上,你可以对一个类应用任何注解,Scala 并不阻止这一点。使用以下示例:
import org.junit.Test
import org.junit.Rule
@Rule
class Foo {
@Test
def test(filename: String) = println("test");
}
编译后,您会在该类上获得一个 @Rule 注释。这是一个已知功能,因为 AFAIK,您可以在源中的字段上“应用”注释,但如果您使用目标注释中的一个,实际上最终会在方法上结束。
如果您通过任何标准测试运行程序运行测试,@Test
那么类上的 应该没有任何区别。唯一重要的是@Test
方法上的注释。
在 Scala 中使用 JUnit 时,应遵循与 Java 相同的规则。
JUnit@Test
注释是方法注释(请参阅此处的源代码),而不是类注释。所以不仅没有必要添加@Test
到一个类中,甚至不应该被允许。
奇怪的是:
听起来像是 Eclipse 中的错误,或者更有可能是 Eclipse Scala 插件中的错误。
您说“从 Eclipse 运行时”没有执行许多测试。这是否意味着您可以成功运行 Eclipse 之外的所有测试?
仅供参考,TestNG,您可以@Test
在类级别指定,这会将此类的所有公共方法转换为测试。但是,是的,据我所知,JUnit 不支持这一点。