如何从使用 JUnit 4 的 Before 和 After 注释注释的方法中排除执行持续时间
How to exclude execution duration from methods annotated with JUnit 4's Before and After annotations
我正在 运行 使用 JUnit 4 并使用 Jenkin 的 perfReport 进行一些简单的性能测试,以便我可以生成性能报告。
虽然 运行 这些测试,我注意到测试方法执行包括用 JUnit 4 的 @before 和 @after 注释的方法的执行时间。
我遇到了类似的 post:Exclude @Before method duration from JUnit test time,但是我需要 JUnit 样式报告中的输出格式,因为 Jenkin 的 perfReport 仅解析 JUnit 样式格式。
因此,有没有办法排除这些注释方法的执行时间?
我通过执行以下操作解决了它:
- 扩展 BlockJUnit4Runner
- 覆盖 运行Child() 方法,因为这是接收测试通知的地方
- 编写自定义 运行Leaf() 方法,因为这是触发测试通知程序以通知测试已经开始或停止的地方。
- 覆盖 methodInvoker() 方法,因为这是调用测试方法的地方
- 创建一个新语句 class,它在功能上执行与在 methodInvoker 中创建的 invokeMethod() 语句对象相同的一组操作。但是,此 class 会收到测试通知程序,因此您可以控制测试的启动方式和时间。
上述方法的一个问题是您将需要提取有助于 运行 JUnit 规则的代码部分,以便保留规则执行,因为这些方法奇怪地是私有的。
我正在 运行 使用 JUnit 4 并使用 Jenkin 的 perfReport 进行一些简单的性能测试,以便我可以生成性能报告。
虽然 运行 这些测试,我注意到测试方法执行包括用 JUnit 4 的 @before 和 @after 注释的方法的执行时间。
我遇到了类似的 post:Exclude @Before method duration from JUnit test time,但是我需要 JUnit 样式报告中的输出格式,因为 Jenkin 的 perfReport 仅解析 JUnit 样式格式。
因此,有没有办法排除这些注释方法的执行时间?
我通过执行以下操作解决了它:
- 扩展 BlockJUnit4Runner
- 覆盖 运行Child() 方法,因为这是接收测试通知的地方
- 编写自定义 运行Leaf() 方法,因为这是触发测试通知程序以通知测试已经开始或停止的地方。
- 覆盖 methodInvoker() 方法,因为这是调用测试方法的地方
- 创建一个新语句 class,它在功能上执行与在 methodInvoker 中创建的 invokeMethod() 语句对象相同的一组操作。但是,此 class 会收到测试通知程序,因此您可以控制测试的启动方式和时间。
上述方法的一个问题是您将需要提取有助于 运行 JUnit 规则的代码部分,以便保留规则执行,因为这些方法奇怪地是私有的。