我有一个Java项目,在Scala中使用JUnit测试。每个测试类都使用@Test
注释:
import org.junit.Test
@Test
class SomeTest {
...
}
JUnit API说@Test
是方法注释。但是,当我从类中删除@Test
注释同时保持方法注释不变时,从Eclipse运行时不会执行许多测试。
那么@Test
注释应用于类的目的是什么?为什么在删除这些注释时某些测试不会运行?
答案 0 :(得分:4)
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注释。这是known feature,因为AFAIK,您可以在源中的字段上“应用”注释,但如果您使用target annotations,则实际上会最终使用该方法。
如果您通过任何标准测试运行器运行测试,则该类的@Test
不应有任何区别。唯一重要的是方法上的@Test
注释。
当您在Scala中使用JUnit时,您应遵循与Java相同的规则。
答案 1 :(得分:2)
JUnit @Test
注释是方法注释(参见源here),不是类注释。因此,不仅不需要将@Test
添加到类中,甚至不应该允许它。
奇怪的是:
听起来像Eclipse中的错误,或者更可能是Eclipse Scala插件。
你说在从Eclipse运行时没有执行许多测试。这是否意味着您可以在Eclipse之外成功运行所有测试?
答案 2 :(得分:1)
仅使用TestNG,您可以在类级别指定@Test
,这会将此类的所有公共方法转换为测试。但是,据我所知,JUnit不支持这一点。