- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我们有相同接口(interface)的两种不同实现。将其视为引用和生产实现。这两个实现由不同的团队实现,目标是从两个实现中获得相同的结果。
创建引用实现的团队已经创建了大量基于 Junit 的测试用例(目前约有 700 个测试用例),并且这些单元测试在开发过程中经常运行。我们可以针对生产实现运行同一组测试用例。
生产实现的功能通过回归测试进行测试。但是,能够针对生产实现运行单元测试让我们能够在每次获得新版本的生产代码时快速反馈是否存在严重问题。
但由于生产版本中缺少某些功能,或者由于已知错误导致结果不同,因此并非所有测试都通过此实现。这使得很难及早发现回归。
这里有几个类别:
(A) 只对引用实现有意义,对生产实现永远不重要的测试用例
(B) 测试生产实现时只需要省略某些断言的测试用例(即引用实现中报告的附加值)
(C) 已知在生产实现中不起作用的测试用例,因为某些功能的开发滞后,但应该在以后包括在内
到目前为止,我们有以下选择:
用仅在引用实现中有效的断言周围的 if 语句使我们的代码困惑。这解决了 (B) 但难以维护。
使用 assumeTrue。这对 (A) 来说没问题,但给人的印象是 (B) 一切都很好。
我想要的是
能够基于运行时条件跳过某些测试,例如 assumeTrue,但对于 (C),这些应该被报告为已跳过而不是成功
有更多的结果状态考虑到一个测试用例之前是否已知有效,这给出了
以前有没有人做过类似的事情,或者甚至可以使用 JUnit(最好结合使用 eclipse JUnit 插件)?
最佳答案
要跳过具有运行时条件的测试,您可以使用 Filter ,您可以根据测试的一个方面(名称,最好是测试方法上的注释 @Development() 或 @Version())选择忽略或不忽略测试。
要使用它来解决 (B),您需要针对每个版本使用不同的测试方法,一种用于 3.1,一种用于 3.2,等等。这似乎使您的单元测试变得困惑,但实际上它使您的工作更容易选择出适用于 3.1 的测试。
对于问题的“时间机器”部分,junit 很难知道测试之前是否已通过。您需要在某处记录旧结果。
要分析哪些测试已更改状态(从通过变为失败),例如通过 CI 系统让您的 junit 测试以系统的方式运行,然后将结果保存在可以进行后处理的地方以提供回归.例如,surefire xml 报告很容易解析。
关于java - JUnit:针对不同实现和细粒度结果状态的相同测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5323832/
在命令提示符下,当你按下插入按钮时,光标从细条变为粗条,表明它处于覆盖模式,当你再次按下它时,它又变细表明它处于插入模式有什么办法可以在 C# 中执行此操作吗? 编辑:我想知道是否有办法使光标变粗/变
RubyRogues 播客上有人曾经说过“学习 CoffeeScript,因为 CoffeeScript 编写的 javascript 比你更好。”抱歉,不记得是谁说的... 所以,我采用了一个非常简
我是一名优秀的程序员,十分优秀!