我遇到了一些问题,有一些非常先进的单元测试(使用PowerMock进行模拟和JUnit 4.5).在没有详细介绍的情况下,测试类的第一个测试用例将始终成功,但同一测试类中的任何后续测试用例都会失败.但是,如果我选择仅运行10中的测试用例5,它将通过.所以所有测试都在单独运行时通过.有没有办法强制JUnit一次运行一个测试用例?我从一个蚂蚁脚本中调用JUnit.
我知道依赖测试用例的问题,但我无法确定为什么会这样.测试用例中没有保存的变量,因此@Before注释无需执行任何操作.这就是为什么我正在寻找一种紧急解决方案,比如强制JUnit单独运行测试.
我知道所有的建议,但最终回答你的问题是一个简单的方法来实现你想要的.只需将此代码放入测试用例中:
Lock sequential = new ReentrantLock(); @Override protected void setUp() throws Exception { super.setUp(); sequential.lock(); } @Override protected void tearDown() throws Exception { sequential.unlock(); super.tearDown(); }
这样,在获取锁定之前不能开始测试,并且一次只能获取一个锁定.
您的测试用例似乎是依赖的,即:case-X的执行会影响case-Y的执行.应避免使用这样的测试系统(例如:JUnit将无法保证您的案例运行顺序).
你应该重构你的案件,使它们彼此独立.很多时候使用@Before和@After方法可以帮助您解决这些依赖关系.
你的问题不在于JUnit的运行所有测试一次,你的问题是,你没有看到,为什么一个测试失败.解决方案:
在测试中添加更多断言以确保每个变量实际上包含您的想法
从Internet下载IDE并使用内置调试器查看各种变量
在测试失败的点之前转储对象的状态.
使用断言的"消息"部分输出更多信息失败的原因(见下文)
禁用除少数几个测试之外的所有测试(在JUnit 3中:在源代码中将所有字符串"void test"替换为"void dtest";在JUnit 4中:将"@Test"替换为"// D @ TEST").
例:
assertEquals(list.toString(), 5, list.size());