Eclipse junit测试发现

时间:2013-06-03 05:18:17

标签: java eclipse junit

在eclipse中 - junit测试运行器会找到这个测试:

class Blah { 
    public static class Tests {
        [Test] void testOne() {}
}}

但它找不到这个测试

class Blah<T> { 
    public static class Tests {
        [Test] void testOne() {}
}}

任何人都可以解释原因,是否有可能以某种方式解决这个问题?

2 个答案:

答案 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 rerun JUnit test

因此,当类是通用的时,测试的执行实际上是有效的。但是,您无法在Eclipse中正常执行它。

有关信息,JUnit视图无法阻止您这样做,因为它将类名存储在运行配置中:请参阅How does Eclipse actually run Junit tests?

如果你提出一个问题,我认为你不会走得太远,因为正如我所说的以这种方式使用泛型类并没有多大意义。