当前位置:  开发笔记 > 编程语言 > 正文

强制JUnit一次运行一个测试用例

如何解决《强制JUnit一次运行一个测试用例》经验,为你挑选了3个好方法。

我遇到了一些问题,有一些非常先进的单元测试(使用PowerMock进行模拟和JUnit 4.5).在没有详细介绍的情况下,测试类的第一个测试用例将始终成功,但同一测试类中的任何后续测试用例都会失败.但是,如果我选择仅运行10中的测试用例5,它将通过.所以所有测试都在单独运行时通过.有没有办法强制JUnit一次运行一个测试用例?我从一个蚂蚁脚本中调用JUnit.

我知道依赖测试用例的问题,但我无法确定为什么会这样.测试用例中没有保存的变量,因此@Before注释无需执行任何操作.这就是为什么我正在寻找一种紧急解决方案,比如强制JUnit单独运行测试.



1> hariseldon78..:

我知道所有的建议,但最终回答你的问题是一个简单的方法来实现你想要的.只需将此代码放入测试用例中:

Lock sequential = new ReentrantLock();

@Override
protected void setUp() throws Exception {
    super.setUp();
    sequential.lock();
}

@Override
protected void tearDown() throws Exception {
    sequential.unlock();
    super.tearDown();
}

这样,在获取锁定之前不能开始测试,并且一次只能获取一个锁定.



2> Itay Maman..:

您的测试用例似乎是依赖的,即:case-X的执行会影响case-Y的执行.应避免使用这样的测试系统(例如:JUnit将无法保证您的案例运行顺序).

你应该重构你的案件,使它们彼此独立.很多时候使用@Before和@After方法可以帮助您解决这些依赖关系.



3> Aaron Digull..:

你的问题不在于JUnit的运行所有测试一次,你的问题是,你没有看到,为什么一个测试失败.解决方案:

    在测试中添加更多断言以确保每个变量实际上包含您的想法

    从Internet下载IDE并使用内置调试器查看各种变量

    在测试失败的点之前转储对象的状态.

    使用断言的"消息"部分输出更多信息失败的原因(见下文)

    禁用除少数几个测试之外的所有测试(在JUnit 3中:在源代码中将所有字符串"void test"替换为"void dtest";在JUnit 4中:将"@Test"替换为"// D @ TEST").

例:

assertEquals(list.toString(), 5, list.size());

推荐阅读
我我檬檬我我186
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有