1

我有一个 Java 项目,在 Scala 中有 JUnit 测试。每个测试类都带有注释@Test

import org.junit.Test

@Test
class SomeTest {
  ...
}

JUnit API说这@Test是一个方法注解。但是,当我从类中删除@Test注释同时保持方法注释完整时,从 Eclipse 运行时不会执行许多测试。

那么将@Test注释应用于类的目的是什么?为什么在删除这些注释后某些测试无法运行?

4

3 回答 3

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 注释。这是一个已知功能,因为 AFAIK,您可以在源中的字段上“应用”注释,但如果您使用目标注释中的一个,实际上最终会在方法上结束。

如果您通过任何标准测试运行程序运行测试,@Test那么类上的 应该没有任何区别。唯一重要的是@Test方法上的注释。

在 Scala 中使用 JUnit 时,应遵循与 Java 相同的规则。

于 2011-12-26T14:42:50.150 回答
2

JUnit@Test注释是方法注释(请参阅此处的源代码),而不是类注释。所以不仅没有必要添加@Test到一个类中,甚至不应该被允许。

奇怪的是:

  • Eclipse 甚至允许您将其添加到 Scala 类中。
  • 这正在改变测试的行为。

听起来像是 Eclipse 中的错误,或者更有可能是 Eclipse Scala 插件中的错误。

您说“从 Eclipse 运行时”没有执行许多测试。这是否意味着您可以成功运行 Eclipse 之外的所有测试?

于 2011-12-26T10:47:06.320 回答
1

仅供参考,TestNG,您可以@Test在类级别指定,这会将此类的所有公共方法转换为测试。但是,是的,据我所知,JUnit 不支持这一点。

于 2011-12-26T15:34:02.130 回答