在JUnit中的Test类中定义内部类时出错

Got*_*mog 10 java reflection junit inner-classes junit3

我在从TestCase继承的Test类中为JUnit 3定义内部类时遇到一些问题.场景如下:

Foo.java

public class Foo {
  public void method() { ... }
}
Run Code Online (Sandbox Code Playgroud)

FooTest.java

public class FooTest extends TestCase {
  public class Bar extends Foo {
    public void method() { ... }
  }
  public void testMethod() { ... }
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我从Eclipse运行它,测试运行正常,但如果我尝试从Ant任务运行它失败:

[junit] junit.framework.AssertionFailedError:类Foo $ Bar没有公共构造函数TestCase(String name)或TestCase()

Bar不是Test类,它只是Foo的一个子类,它覆盖了一些方法,在测试时我不需要做真正的事情.

我现在很迷茫,我不知道如何解决这个问题.是独立创建子类的唯一方法吗?

小智 17

这是因为您在junit文件集中包含了一个嵌套类.在build.xml中添加"excludes"属性.

例如:

<target name="test" depends="test-compile">
    <junit>
        <batchtest todir="${test.build.dir}" unless="testcase">
            <fileset dir="${test.build.classes}"
                includes = "**/Test*.class"
                excludes = "**/*$*.class"/>
        </batchtest>
    </junit>
</target>  
Run Code Online (Sandbox Code Playgroud)


Jas*_*son 5

您可以尝试将Bar类定义为static:

public class FooTest extends TestCase {
  public static class Bar extends Foo {
    public void method() { ... }
  }
  public void testMethod() { ... }
}
Run Code Online (Sandbox Code Playgroud)

...但它在一个环境中工作而在另一个环境中工作的事实暗示了两件事之一:

  1. Java版本
  2. 类路径
  3. [编辑:如下面Jim所建议的]不同版本的junit.jar