7

我有三个 JUnit 测试类,它们都有一些通用代码,包括相同的 setup() 方法。因此,我将这段代码分解到它自己的扩展 TestCase 的类中,现在让三个较早的 JUnit 测试类扩展了这个新类。新的超类本身不包含任何测试。

然而,在我们的构建中,JUnit 运行所有的 JUnit 测试类,包括没有测试的新超类。它给出了这个错误:

junit.framework.AssertionFailedError: No tests found in com.acme.ControllerTest

我可以通过创建一些在 ControllerTest 中什么都不做的简单测试来消除这个错误。但是有没有更清洁的方法来解决这个问题?

4

1 回答 1

9

这对我有用

JUnit 3

public abstract class BaseTest extends TestCase {

    public void setUp(){
        System.out.println("before called");
    }
}

public class Test1 extends BaseTest {

    public void test() {
        Assert.assertTrue(true);
        System.out.println("Test1");
    }   
}

public class Test2 extends BaseTest {

    public void test() {
        Assert.assertTrue(true);
        System.out.println("Test2");
    }   
}

我得到的输出是

before called
Test2
before called
Test1

JUnit 4

对于 JUnit4,您甚至不需要将基类抽象化。您可以使用以下内容

public class BaseTest {
    @Before
    public void setUp(){
        System.out.println("before called");
    }
}

public class Test1 extends BaseTest {
    @Test
    public void test() {
        Assert.assertTrue(true);
        System.out.println("Test1");
    }   
}

public class Test2 extends BaseTest {
    @Test
    public void test() {
        Assert.assertTrue(true);
        System.out.println("Test1");
    }   
}

我强烈推荐使用 JUnit 4。使用注解意味着你打破了一些可能会令人困惑的继承依赖关系。

于 2012-09-05T21:49:51.380 回答