类<test>对象与Test对象的类型不同? Junit的</测试>

时间:2011-06-24 13:47:18

标签: java unit-testing junit

我正在尝试编写一些代码,这些代码将项目中的TestSuites递归地添加到位于包层次结构根部的一套套件中。

我已经编写了返回Collection对象的代码,该对象包含我项目中找到的每个Test Suite的File对象。

我现在正在尝试遍历它们并将它们添加到名为AllTests.java的文件中的TestSuite中:

public static Test suite() throws IOException, ClassNotFoundException {
    TestSuite suite = new TestSuite();

            //Code not included for getTestSuites() in this snippet.
    Collection<File> testSuites = getTestSuites();
    for(File f: testSuites) {

            //Truncate the path of the test to the beginning of the package name
            String testName = f.getAbsolutePath().substring(f.getAbsolutePath().lastIndexOf("net"));

            //Replace backslashes with fullstops
            testName = testName.replaceAll("\\\\", ".");

            //Take the .class reference off the end of the path to the class
            testName = testName.replaceAll(".class", "");

            //Add TestSuite to Suite of Suites

            Class<? extends Test> test = (Class<? extends Test>) AllTests.class.getClassLoader().loadClass(testName);
            suite.addTest(test);
    }

不幸的是,我在suite.addTest(测试)行上遇到以下编译器错误:

  

方法中的addTest(Test)方法   TestSuite不适用于   参数(类&lt; capture#3-of?extends Test&gt;)

我假设一个Class&lt;测试&gt;参考和测试参考是一样的吗?

4 个答案:

答案 0 :(得分:2)

是的,你假设一个Class&lt;测试&gt;参考和测试参考是同一个。

您需要扩展Test 的类的实例,而不是定义扩展为Test的类对象的实例(类也是java中的对象)。< / p>

答案 1 :(得分:1)

TestSuite.addTest需要一个Test类实例;不只是一个Class对象。

如果您的测试可以(他们应该)没有参数进行实例化,您可以尝试使用Class.newInstance()

-

一个更好的策略是开始使用Maven;它会自动运行src / test / java源文件夹中的所有Test类。但这可能是一个相当大的改革:)。

答案 2 :(得分:1)

Class<Test>描述了类Test的概念 - 它的字段,方法以及定义类Test时Java代码描述的其他内容。由于基本上只有一个Class<Test>类,因此 (为了让类加载器不在讨论中)在JVM中有一个Test实例。

这同样适用于每个Test子类 - 对于每个Class<TestSubClass>,通常会有一个TestSubClass个实例。

另一方面,可以有任意数量的Test个对象。

Java允许您通过针对Test实例调用Class<Test>,从newInstance创建Class<Test>个对象。所以基本上,改变你的行:

suite.addTest(test);

suite.addTest(test.newInstance());

处理所有可能的例外情况。

答案 3 :(得分:0)

您正在使用的方法需要Test(sub)类的实例。 您所追求的可能是addTestSuite(Class testClass),它允许添加类。