7

我正在使用 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

4 回答 4

7

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

于 2010-01-26T07:44:42.270 回答
3

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

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

于 2010-01-26T07:42:26.633 回答
0

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

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

  • 在实用程序类的static方法中定义它
  • 在超类中定义它并从每个测试方法中调用它
于 2010-01-26T07:46:23.130 回答
0

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

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

于 2010-01-26T08:13:39.213 回答