java - 在参数化 JUnit 测试到来时执行大量参数化测试,而不是在它们全部可用时执行

标签 java eclipse unit-testing junit parameterized

我正在开发一个带有生成的 junit 测试的项目。大约有 8 200 000 个 junit 测试要执行。我有一个进行测试的测试和一个生成数据以测试“next()”方法的迭代器。但我发现 JUnit 首先生成所有测试的所有参数,当所有参数都可用时,实际测试就开始了。 不幸的是,执行如此大量的测试需要超过 2 小时才能生成所有测试用例,并且即使使用 Xmx16g 和 Xms1g 也会以 OutOfMemoryError 结束。但是,当一一执行而不首先生成它们时,就可以了(当我有一个测试生成测试数据并立即测试它时)。但这只是对所有人的一项考验。我希望它可以作为多个测试使用,就像 JUnit 通常所做的那样,但无需首先预生成数据。

JUnit (4/5) 中有没有办法在每次迭代器上调用 next() 时执行测试?只要 hasNext() 返回 true 就执行测试?

我知道在这样的示例中无法显示测试进度,但这对我来说没关系。我只想执行它们,然后当它们完成时我想查看 html 报告。唯一的问题是,有时我想在 eclipse 中执行测试,然后在 eclipse 中查看结果(如果可能的话)。

最佳答案

我没有对这个主题进行深入的搜索,但从我已经发现的情况来看,JUnit 4 没有能力做这样的事情。它必须首先预先生成参数,处理它们生成测试用例,然后执行它们。

对于仅传递单个 int 来测试并执行不执行任何操作的测试的简单测试,生成 200 万个 int 将使整个过程等待超过 1 小时(我只是在 1 小时后停止等待),甚至第一个测试也不会开始执行。

因此,执行如此大量测试的唯一方法是在单个测试中执行它们,然后手动存储测试结果。

换句话说:在junit测试用例中编写自己的测试执行机制。

我会把这个答案留在这里。如果亲爱的读者知道解决这个问题的方法(可能是在比 JUnit 4 更新的 JUnit 中),请发布答案。

关于java - 在参数化 JUnit 测试到来时执行大量参数化测试,而不是在它们全部可用时执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44494731/

相关文章:

java - 如何使用 iText 库在 PDF 表格上应用背景图像?

java - 在 Java 中存储简单的小时/分钟信息 - 最佳实践问题

c++ - 最新版本的 boost 和 boost 几何库 (GGL) 之间的冲突

c# - AutoFixture 单元测试参数设置

java - 使用PID Controller 来管理程序中的资源

javascript - 如何在URL中使用 anchor 标记?

java - ASTVisitor 类定义节点

Eclipse 自动刷新资源并排除构建目录

c# - Unitests 和 VS2012 Update 2 CTP 4 的问题

python - 排除目录,python nosetest中的模块