3

在 eclipse - junit 测试运行器会发现这个测试:

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

但它不会找到这个测试

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

谁能解释为什么,是否有可能以某种方式解决这个问题?

4

2 回答 2

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注释中指定的所有测试类。

于 2013-06-03T07:16:51.490 回答
2

这有点奇怪。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 视图并不能真正阻止您这样做,因为它将类名存储在运行配置中:请参阅Eclipse 如何实际运行 Junit 测试?.

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

于 2013-06-03T07:22:13.593 回答