在eclipse中 - junit测试运行器会找到这个测试:
class Blah {
public static class Tests {
[Test] void testOne() {}
}}
但它找不到这个测试
class Blah<T> {
public static class Tests {
[Test] void testOne() {}
}}
任何人都可以解释原因,是否有可能以某种方式解决这个问题?
答案 0 :(得分:2)
我无法解释为什么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
注释中指定的所有测试类。
答案 1 :(得分:2)
这有点奇怪。 Eclipse似乎与这个有点不一致。
首先,我们需要说这样的通用测试真的没有意义。 JUnit(和Eclipse)使用反射来实例化这个类,因此它不关心通用部分。它可能无法按预期工作。
为了解释Eclipse部分,Eclipse有两个执行JUnit测试的阶段:它检测该类是否是JUnit测试,然后执行它。这是阻止您运行测试的第一部分。如果您创建通用测试:
public class GenericTest<T> {
@Test public void foobar() {
System.out.println("GenericTest");
}
}
然后,此类上没有“Run as-&gt; JUnit test”选项。如果您删除了&lt; T&gt;,它就可用,您可以运行它;它出现在JUnit视图中。就像你说的那样。
不一致的部分是当您放回时,您现在可以从JUnit视图重新执行测试。
因此,当类是通用的时,测试的执行实际上是有效的。但是,您无法在Eclipse中正常执行它。
有关信息,JUnit视图无法阻止您这样做,因为它将类名存储在运行配置中:请参阅How does Eclipse actually run Junit tests?。
如果你提出一个问题,我认为你不会走得太远,因为正如我所说的以这种方式使用泛型类并没有多大意义。