【问题标题】:Super JUnit classes with no test cases没有测试用例的超级 JUnit 类
【发布时间】:2012-09-05 21:25:38
【问题描述】:

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

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

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

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

【问题讨论】:

  • ControllerTest 是抽象的吗?我不认为 JUnit 在内存中的抽象类中运行测试
  • 不,它不是抽象的。我会试试的。
  • 非常好 - 请参阅我的回答,了解如何在 JUnit 4 中进行操作

标签: java junit


【解决方案1】:

这对我有用

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。使用注解意味着你打破了一些可能会令人困惑的继承依赖关系。

【讨论】:

  • 我知道这个问题有点老了,但你能帮我理解你为什么还要说 assertTrue(true) 吗?为什么不把它排除在外?
  • @rbwhitaker 只是为了让它更像测试;)在这个例子中不需要它们
  • 很公平。我们一直在讨论 assertTrue(true) 是否有实际用途。我们想不出任何办法。由于您的示例代码使用了它,我想知道您是否知道我们没有考虑的事情。但我能理解你为什么要在这里做。一种说法,“把真正的测试东西放在这里。”我想只是填充代码。谢谢!
猜你喜欢
  • 2022-12-18
  • 2022-10-12
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 2013-04-08
  • 1970-01-01
相关资源
最近更新 更多