Java JUnit扩展基类并运行该类中的测试
我正在使用JUnit3,并且经常需要测试对象是否正确创建。我的想法是编写一个类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
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测试运行,并且所有测试都成功通过。很好。那么这个问题就无关紧要了:)