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

时间:2010-01-26 07:27:34

标签: java unit-testing junit junit3

我正在使用JUnit 3,并且我经常需要测试是否正确创建了一个对象。我的想法是编写一个类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);
  }
}

我做错了什么?

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

4 个答案:

答案 0 :(得分:7)

您已经说过“MyTests不会在MyTestBase中运行测试。”我试过了,所有测试都被调用,包括MyTestBase中的那些。

答案 1 :(得分:2)

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

事实上,如果你有这些抽象方法,你可能会发现你甚至不需要设置阶段 - 你可以在需要值的地方调用抽象方法,而不是使用实例变量。显然它将取决于具体情况,但在许多情况下,这可能会更加清洁。

答案 2 :(得分:0)

您要做的不是实现目标的最合适方式:

如果您想要具有进行某些检查的常用功能

  • static方法
  • 中的实用程序类中定义它
  • 在超类中定义它并从每个测试方法中调用它

答案 3 :(得分:0)

我不知道你究竟想做什么,但通常对于测试中太多常见部分来说并不是一个好主意,因为当常见部分失败时,你会有大量的测试甚至难以实现您的软件中可能只有一个小错误。

我建议您使用Factory或Builder来创建复杂对象,然后测试Factory(或Builder)以正确创建对象。