[英]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测试? 。
如果你提出一个问题,我认为你不会走得太远,因为我说用这种方式使用泛型类并没有多大意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.