我正在使用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);
}
}
我做错了什么?
更新道歉。愚蠢的错误。我的基类中的测试没有正确命名。
答案 0 :(得分:7)
您已经说过“MyTests不会在MyTestBase中运行测试。”我试过了,所有测试都被调用,包括MyTestBase中的那些。
答案 1 :(得分:2)
好吧,你可以使MyTestBase
抽象,这样它就不会尝试在基类中运行测试。一个更好的解决方案是在基类中使用setUp
并使其调用抽象方法(例如getFoo()
)来初始化稍后需要的变量。
事实上,如果你有这些抽象方法,你可能会发现你甚至不需要设置阶段 - 你可以在需要值的地方调用抽象方法,而不是使用实例变量。显然它将取决于具体情况,但在许多情况下,这可能会更加清洁。
答案 2 :(得分:0)
您要做的不是实现目标的最合适方式:
如果您想要具有进行某些检查的常用功能
static
方法答案 3 :(得分:0)
我不知道你究竟想做什么,但通常对于测试中太多常见部分来说并不是一个好主意,因为当常见部分失败时,你会有大量的测试甚至难以实现您的软件中可能只有一个小错误。
我建议您使用Factory或Builder来创建复杂对象,然后测试Factory(或Builder)以正确创建对象。