在 eclipse - junit 测试运行器会发现这个测试:
class Blah {
public static class Tests {
[Test] void testOne() {}
}}
但它不会找到这个测试
class Blah<T> {
public static class Tests {
[Test] void testOne() {}
}}
谁能解释为什么,是否有可能以某种方式解决这个问题?
我无法解释为什么 eclipse 不接受泛型类作为 JUnit 测试运行。这可能是一个错误,但我在问题跟踪器上找不到任何东西。
现在有两种方法可以解决您的问题。您可以为您的测试手动创建运行配置并启动它。另一种方法是使用测试套件。向包含以下内容的测试包添加一个新类
package com.prodyna.packetcapture.text;
import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;
@RunWith(Suite.class)
@SuiteClasses({ Blah.class })
public class AllTests {
}
您可以将其作为 JUnit-test 正常运行,它将运行您在SuiteClasses
注释中指定的所有测试类。
这有点奇怪。Eclipse 似乎与这个有点不一致。
首先,我们需要说,像这样进行通用测试并没有真正的意义。JUnit(和 Eclipse)使用反射来实例化这个类,所以它不关心泛型部分。它可能不会像你期望的那样工作。
为了解释 Eclipse 部分,Eclipse 有两个阶段来执行 JUnit 测试:它检测类是否是 JUnit 测试,然后执行它。这是阻止您运行测试的第一部分。如果您创建通用测试:
public class GenericTest<T> {
@Test public void foobar() {
System.out.println("GenericTest");
}
}
然后在此类上不提供“运行方式-> JUnit 测试”选项。如果您删除 <T>,它将变为可用并且您可以运行它;它出现在 JUnit 视图中。这正如你所说。
不一致的部分是当你放回后,你现在可以从 JUnit 视图重新执行测试。
因此,当类是通用的时,测试的执行实际上是有效的。但是,在 Eclipse 中不能正常执行。
有关信息,JUnit 视图并不能真正阻止您这样做,因为它将类名存储在运行配置中:请参阅Eclipse 如何实际运行 Junit 测试?.
如果您提出问题,我认为您不会走得太远,因为正如我所说,以这种方式使用泛型类并没有真正意义。