【问题标题】:Junit test cases stopped executing after 2 test casesJunit 测试用例在 2 个测试用例后停止执行
【发布时间】:2016-04-18 14:22:04
【问题描述】:

我正在Spring + Hibernate框架中编写DBunit(DAO方法的junit)并使用Java8。 我在 Test 类中有很多测试用例,单独运行时都是成功的。但是当我运行那个特定的类时,测试用例通过执行 2 个测试用例在第 3 个测试用例处停止执行。 我尝试打乱测试用例,它随机占用任何方法,它在第三个测试用例处停止执行。

配置正确实现,在下面的sn-p中,在testCMethod测试用例中失败。

public class ABCDAOTest extends Test case {


    @Override
    @Before
    public void setUp() throws Exception {
            super.setUp()
    }


    @Test
    public void testAMethod(){
        /*
            My test case
        */
    }

    @Test
    public void testBMethod(){
        /*
            My test case
        */
    }


    @Test
    public void testCMethod(){
        /*
            My test case
        */
    }


    @Test
    public void testDMethod(){
        /*
            My test case
        */
    }


    }

请提供查看您的意见。

【问题讨论】:

  • 这不是有效的 Java 语法,所以我不确定它是如何执行的。
  • 上面的 sn-p 是我做的一个例子。个别测试用例在我的实际场景中运行正常。从语法上讲,它工作正常,但在执行 2 个测试用例并在第三个停止后失败。
  • 假设您使用的是基于 junit 注释的“扩展测试用例”
  • 很明显这不是你的真实代码 - 在你展示之前你不会得到任何有用的答案。
  • 除此之外:“它在 testCMethod 测试用例中失败”对您的问题的描述非常糟糕。考虑发布真正的错误消息、堆栈跟踪等。您基本上是在告诉我们“我得到了一些以某种方式失败的代码”。您究竟希望我们如何提供此类意见?

标签: java hibernate unit-testing junit


【解决方案1】:

要按照您希望的特定顺序运行测试,可以这样完成

import org.junit.runners.MethodSorters;

import org.junit.FixMethodOrder;
import org.junit.Test;

@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class SampleTest {

    @Test
    public void firstTest() {
        System.out.println("first");
    }

    @Test
    public void secondTest() {
        System.out.println("second");
    }
}

记住 MethodSorters 是一个枚举,它的其他常量是

JVM - 按照 JVM 返回的顺序保留测试方法。请注意,来自 JVM 的顺序可能因运行而异。

DEFAULT - 以确定性但不可预测的顺序对测试方法进行排序。

关于在第二次之后没有运行测试,可能的原因可能是第三次测试运行可能由于无限循环而无法给出结果。 所以我们也可以通过添加Rule并使用Timeout来限制测试用例的运行时间,如下所示

public class LongRunningTests {
@Rule
public Timeout globalTimeout = Timeout.seconds(5);
@Test
public void whatWeDoInATestMethodEchoesInEternity() {
while(true);
}
} 

希望这对你有用。

【讨论】: