Java JUnit扩展基类并运行该类中的测试

Java JUnit扩展基类并运行该类中的测试,java,unit-testing,junit,junit3,Java,Unit Testing,Junit,Junit3,我正在使用JUnit3,并且经常需要测试对象是否正确创建。我的想法是编写一个类MyTestBase,如下所示,然后对特定情况下的单元测试进行扩展 但是,在我给出的示例中,MyTests不运行MyTestBase中的测试 public class MyTestBase extends TestCase { protected String foo; public void testFooNotNull() { assertNotNull(foo); } publi

我正在使用JUnit3,并且经常需要测试对象是否正确创建。我的想法是编写一个类
MyTestBase
,如下所示,然后对特定情况下的单元测试进行扩展

但是,在我给出的示例中,
MyTests
不运行
MyTestBase
中的测试

public class MyTestBase extends TestCase {
   protected String foo;
   public void testFooNotNull() {
     assertNotNull(foo);
   }
   public void testFooValue() {
     assertEquals("bar", foo);
   }
}


public class MyTests extends MyTestBase {
  public void setUp() {
    this.foo = "bar";
  }
  public void testSomethingElse() {
    assertTrue(true);
  }
}
我做错了什么


更新道歉。愚蠢的错误。我的基类中的测试没有正确命名。

好吧,您可以将
MyTestBase
抽象化,这样它就不会尝试在基类中运行测试。更好的解决方案是在基类中设置
setUp
,并使其调用抽象方法(例如
getFoo()
)来初始化稍后需要的变量


事实上,如果你有这些抽象方法,你可能会发现你根本不需要一个设置阶段——你可以在需要值的地方调用抽象方法,而不是使用实例变量。显然,这取决于具体情况,但在许多情况下,这可能会更干净。

您说过“MyTests不在MyTestBase中运行测试。”。我尝试了它,所有的测试都被调用,包括MyTestBase中的测试。

您试图做的并不是实现目标的最合适的方法:

如果您想拥有进行一些检查的通用功能

  • 在工具类的
    静态方法中定义它
  • 在超类中定义它,并从每个测试方法中调用它

我不知道您到底想做什么,但通常在测试中使用太多的公共部分不是一个好主意,因为当公共部分失败时,您将有大量的测试失败,甚至很难,您的软件中可能只有一个小错误


我建议您使用工厂或构建器来创建复杂对象,然后测试工厂(或构建器)是否正确创建对象。

因为系统是用Java 1.4.2编写的,所以我投票结束这个问题,因为它是错误的。它没有提出真正的问题。@JohnOxley这么多年后,我投票决定以打字错误/无法复制的方式结束(因为事实就是这样)。看到这几乎发生在十年前也有点有趣:)是的,我用JUnit3在Eclipse上进行了尝试。我将MyTests类作为JUnit测试运行,并且所有测试都成功通过。很好。那么这个问题就无关紧要了:)