繁体   English   中英

Eclipse junit测试发现

[英]Eclipse junit test discovery

在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");
  }
}

然后,此类上没有“Run as-> JUnit test”选项。 如果你删除<T>,它就可用了,你可以运行它; 它出现在JUnit视图中。 这就像你说的那样。

不一致的部分是当您放回时,您现在可以从JUnit视图重新执行测试。

Eclipse重新运行JUnit测试

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

有关信息,JUnit视图无法阻止您执行此操作,因为它将类名存储在运行配置中:请参阅Eclipse如何实际运行Junit测试?

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM