【问题标题】:python conditional coverage for subexpression子表达式的python条件覆盖
【发布时间】:2014-01-16 00:56:40
【问题描述】:

我正在尝试找到一个 python 代码覆盖工具,它可以测量语句中是否覆盖了子表达式:

例如,我想看看下面的例子中是否涵盖了condition1/condition2/condtion3?

if condition1 or condition2 or condition3: x = true_value

【问题讨论】:

  • 他想知道一个条件是否被评估为真,是否被评估为假,和/或改变其状态是否会影响整个决策(可以说它被视为控制决定结果)。 (有关详细信息,请参阅 MC/DC 报道)。
  • 我认为实现这一点可能并非易事。 coverageNed Batcheldercoverage - 但是它只涵盖分支覆盖范围,而不是表达式 AFAIK 的一部分。
  • 正如这个问题/答案 stackoverflow.com/questions/677219/condition-coverage-in-python 所指出的那样——coverage.py 库/工具实现了“分支覆盖”——但我不确定它是否像你一样对条件进行全面覆盖问。
  • 谢谢,詹姆斯。 AFAIK,coverage.py 在这里不支持我的用例,这就是我问这个问题的原因。
  • 分支覆盖 MC/DC覆盖。是的,这样做并非易事。必须检测代码以收集条件执行时的状态;理想情况下,这样做的成本很低,因此性能不会受到严重影响(收集了大量数据,通常在内部循环中!)。还需要对这些条件状态进行执行后分析,以确定它们是否是因果关系。最后,您需要某种方式来显示答案,因为它是根据部分行来表示的。 (我使用强大的工具为 Rockwell Relay Ladder 逻辑引擎构建了这个)。

标签: python code-coverage python-coverage


【解决方案1】:

对此唯一合理的答案是:目前没有开箱即用的实现

最接近的东西 分支覆盖Ned Batchelder's coverage.py 工具。

注意:实现这一点绝非易事。

正如@Ira Baxter 指出的那样它是可以实现的。

【讨论】:

    【解决方案2】:

    instrumental 确实为 python 应用程序提供条件覆盖,但它不再是not maintained

    话虽如此,如果您的代码在 Python 2.7 或较早的 Python 3 版本之一上运行,它可能就足够了

    虽然我无法将它与 tox 集成,但它确实适用于 Python 2.7 上的 pytesthypothesis

    【讨论】:

      猜你喜欢
      • 2010-10-15
      • 1970-01-01
      • 2019-06-26
      • 1970-01-01
      • 1970-01-01
      • 2021-04-20
      • 1970-01-01
      • 2013-12-14
      • 1970-01-01
      相关资源
      最近更新 更多