问题标签 [junit-rule]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
894 浏览

java - 如果测试失败,则用于调试输出的 Log4j appender

我想设置我的测试日志记录,以便主要抑制日志输出 - 除非测试失败。然后我想要调试输出。

我知道仅修改测试类路径中的 log4j.properties 或仅使调试日志始终处于活动状态以进行测试的手动解决方案-但我不想在控制台中发送带有绿色测试的不必要输出的垃圾邮件。

对于失败的测试,我希望自动构建为我提供调试输出,以防出现一些奇怪的环境问题。

我一直在想应该有一个 appender 可以与一个 junit 规则结合使用,该规则会抑制输出,直到知道测试结果,然后仅在测试失败时才将日志记录推迟到另一个 appender。

我可能自己做这个,但我想知道是否有人以前尝试过,或者是否有更好的解决方案。

0 投票
1 回答
364 浏览

java - 跳过来自 TestWatcher 的测试

我正在处理的项目目前正在使用 JUnit 4.10,并且正在尝试升级到 4.12,以从最近 2 个版本中引入的一些功能中受益。

但是,TestWatcher 发生了变化,现在正在捕获从其任何生命周期方法(启动、完成等)抛出的每个异常。这会导致一些问题,因为我们有一个远程记录的观察者,所以如果由于某种原因服务器出现故障,我们希望能够跳过测试,而不是让它失败。

到目前为止,我们已经捕获了 IOException 并将其作为 AssumptionViolatedException 重新抛出,因此测试将被跳过。现在,有了新的观察者,异常被捕获,测试正常运行,最后失败,因为观察者有一个非空的错误列表。

有什么办法吗?我应该只写自己的规则吗?

0 投票
1 回答
65 浏览

junit4 - Junit TestRule 注释字段与方法

假设您定义了一个 TestRule(例如,一个 TemporaryFolder),您可以通过以下任一方式在测试类中应用该规则:

1.通过使用@Rule 注释方法

2.通过使用@Rule 注释字段

似乎每个测试用例都以两种形式调用TemporaryFolder构造函数。每种形式的优缺点是什么?

0 投票
2 回答
1758 浏览

java - 聚合具有相互依赖关系的 JUnit 规则

在更复杂的单元测试中,我经常需要一组特定的规则。其中一些规则与另一个规则有依赖关系。由于排序是相关的,因此我使用 RuleChains。到目前为止一切都很好。

然而,这在大多数测试中都是重复的(偶尔使用附加规则)。这种重复不仅感觉没有必要重复,而且重复起来很麻烦,而且在需要集成附加规则时,还需要在很多地方进行调整。

我想要的是Rule of Rules,即包含或聚合其他(应用程序和测试特定)规则的(预定义)规则。

我将举例说明目前的情况:

假设给定的规则相互依赖,例如 ApplicationSpecificRule 要求首先执行 DatabaseConnectionRule 以建立连接,ConfigurationRule 初始化了一个空配置等。还假设对于这个(相当复杂的测试)所有规则都是实际需要。

到目前为止,我能想到的唯一解决方案是创建返回预定义规则链的工厂方法:

在测试中,这可以按如下方式使用:

这样就可以删除重复项,并且可以轻松集成其他规则。甚至可以将特定于测试的规则添加到该规则链。但是,当需要进行其他设置时,无法访问包含的规则(假设您需要这些ApplicationSpecificRule规则才能创建某些域对象等)。

理想情况下,这将扩展为也支持使用其他预定义的集合,例如advandancedSet建立在规则之上的集合basicSet

这可以以某种方式简化吗?首先这是一个好主意还是我以某种方式滥用了规则?对重组测试有帮助吗?想法?

0 投票
3 回答
2869 浏览

java - 跳过@Before 进行测试|| 有没有办法在 TestRule 中执行 @Before 方法?

高级别的,我有一个非常简单的 JUnit 测试类。我有几个@Tests 和一个@Before,它们做了一些设置。对于一个测试用例,设置会有所不同(我不希望它运行)。

通过一些搜索,我找到了https://stackoverflow.com/a/13017452/413254。这建议创建一个 @Rule 来检查特定注释并执行 @Before 语句。

我的困惑在于如何在规则中执行 @Before 方法。有没有办法做到这一点?还是我需要传入测试类本身并执行@before 方法(setup()在下面的示例中)?

相关测试代码:

0 投票
1 回答
424 浏览

java - 使用系统规则拦截 System.exit() 在 Swing 窗口中失败

我的任务是为在各种情况下 System.exit(1) 所需的实用程序应用程序设置一些 JUnit 测试,而系统规则非常适合测试它。该应用程序还可以在 GUI 模式下运行,它会弹出一个小的 JFrame。当它在应用了 ExpectedSystemExit 规则的 JUnit 测试的上下文中运行时,随着 JFrame 的构建,某些东西会偷偷地退出 jvm。关闭 ExpectedSystemExit 规则,测试正常运行,弹出 JFrame 就好了,只是我无法再测试 jvm exit()s。

一个猜测是,SecurityManager 系统规则 1.9.0 实施不允许某些权限。我仍在收集更多调试信息。在那之前,这个问题是否有已知的解决方案?

0 投票
0 回答
50 浏览

android - 禁止基于设备类型的android测试?

我使用 Gradle 'connectedCheck' 运行 Instrumentation 测试套件,它在所有连接的设备上执行测试。某些测试仅在某些设备上失败,我想要一种机制来抑制/忽略仅针对该设备的这些测试。

谁能告诉我最好的方法吗?我正在研究 JUnit 测试规则,但想知道 Android 是否提供任何 API 以更简单的方式实现。

0 投票
2 回答
2413 浏览

java - 未调用 TestRule 中的 @Before 方法

我实现了一个JUnit 4 TestRule(扩展一个ExternalResource),并将它作为一个注入@ClassRule到我的测试类中:我想在这个类的每个测试中都初始化一个资源,并最终将其拆除。

我的问题是在我的方法之前/之后根本没有调用我的@Before和规则方法:知道为什么会这样吗?@After@Test

最小的可编译示例:

我在这里有什么误解吗?请注意,非静态也会发生同样的情况@Rule

我正在使用JUnit 4.11

非常感谢您的任何提示。

0 投票
1 回答
362 浏览

junit4 - 是否可以从自定义规则中找到当前的 JUnitParams 参数?

我开始使用 JUnitParams 来编写参数化测试,它的效果很棒。例如,使用 调用以下测试false,然后使用调用true

一个小麻烦是我有一个自定义规则(如org.junit.rules.TestRule),它只存在用于将一些附加信息写入日志。它目前所做的是

当我上面只有两个参数的时候,一个方法的两次执行写同名是没有问题的,我可以简单的数一下。但是,打印参数值的规则仍然很有用,特别是如果我有更多。

那么,是否可以从自定义规则中找到测试参数?

0 投票
3 回答
7549 浏览

android - 如何在测试期间调用 oncreate 之前获取活动引用

如何在调用 onCreate 之前获取 Activity 的引用。虽然它正在测试中。我使用 ActivityTestRule 作为 JUnit 规则。这个要求的原因是我想将 Mocks 注入到来自测试的活动中。