m3t*_*man 5 java testing junit
假设我想从我的IDE(Intellij IDEA或eclipse)4000 JUnit测试手动运行; 前1000次测试运行非常顺利(比如他们需要3分钟全部1000次),但测试1001单独使用超过30分钟.有没有办法可以跳过测试1001(当它仍在运行时)并让测试1002(和其他人)继续前进.我不想@Ignore测试1001并重新运行套件,因为我已经有测试1-1000的答案; 我也不想选择1001-4000测试,因为它需要太多时间.
我会使用某种按钮 - 跳过电流测试 - 可以在测试运行时按下.
如果不存在此类功能,IDE开发人员或JUnit开发人员需要对其进行增强吗?
Aar*_*lla 13
使用JUnit 4时,这实际上非常简单Assume
.Assume
是一个帮手类Assert
.不同之处在于,Assert
将使测试失败而Assume
将跳过它.
常见用例适用Assume.assumeTrue( isWindows() )
于仅适用于Windows文件系统的测试.
所以你可以做的是定义一个系统属性skipSlowTests
并添加
Assume.assumeTrue( Boolean.getBoolean("skipSlowTests") )
Run Code Online (Sandbox Code Playgroud)
在您通常想要跳过的慢速测试开始时.创建一个定义属性的Eclipse启动配置,true
您可以方便地在两者之间切换.
如果要运行慢速测试,请在Eclipse(或整个类)中选择方法,然后从上下文菜单中使用"Run as JUnit Test".由于该属性是false
默认属性,因此将运行测试.
不,如果测试已经在运行,则不能跳过测试.
我建议你做的是Categories
将慢速测试与其他测试分开.
例如:
public interface SlowTests {
}
public class MyTest {
@Test
public void test1{
}
@Category(SlowTests.class)
@Test
public void test1001{
// this is a slow test
}
}
Run Code Online (Sandbox Code Playgroud)
为快速测试创建一个测试套件.
@RunWith(Categories.class)
@ExcludeCategory(SlowTests.class)
@SuiteClasses(MyTest.class)
public class FastTestSuite {
}
Run Code Online (Sandbox Code Playgroud)
现在执行FastTestSuite
if,如果你不想运行慢速测试(例如test1001).MyTest
如果要运行所有测试,请执行正常操作.
您要求的是在测试过程中停止执行代码。如果代码中没有挂钩来允许执行当前测试,则无法停止执行当前测试。您最好的解决方案是按照其他人的建议使用类别。
基本上,JUnit 执行所有 @Before 方法(包括 @Rules),然后执行 @Test 方法,然后执行 @After 方法(同样包括 @Rules)。即使假设 JUnit 有一种停止执行其代码位的机制(事实上并没有),大部分时间还是花在了代码上。因此,要“跳过”已经开始的测试,需要您修改测试代码(以及可能正在测试的代码),以便可以干净地停止它。干净地停止正在执行的线程本身就是一个问题[*]。
那么你有什么选择呢?
并行运行测试,这样您就不必等待测试完成那么长时间。这可能有效,但并行测试可能需要大量工作。
停止执行测试,并修复您正在处理的测试。大多数 IDE 都可以选择终止运行测试的 JVM。这绝对是最简单的选择。
实现您自己的测试运行器,它在单独的线程中运行测试。然后,该测试运行程序要么等待线程完成执行,要么检查某处的标志,该标志将作为其停止的信号。这听起来很复杂,因为您不需要管理线程,还需要在正在运行的 jvm 中设置标志。也许在某个地方创建一个文件?然后,该跑步者将无法通过当前正在运行的测试,您可以继续进行下一个测试。请注意,中途“停止”测试可能会使内容处于不一致的状态,或者您最终可能会并行执行内容。
那里有并行的 JUnit 运行程序,我认为您不会从 IDE 开发人员那里得到太多帮助(至少在短期内)。另外,看看 TestNG,它允许并行运行。
对于使用类别,我使用的一种解决方案是使用 Maven Surefire 或类似工具单独运行长时间运行的测试,而不是通过 IDE。这涉及到在我的机器上的其他地方检查源代码并在那里进行构建。
[*]:Java,如何停止线程,关于停止线程
归档时间: |
|
查看次数: |
4276 次 |
最近记录: |