1

我想在 PHP 中使用 Behat 来近似测试行为的覆盖率。

显然,与代码覆盖率不同,行为覆盖率不能精确量化,但是,我们可以从一开始就知道我们计划适应哪些行为。例如,我们可能知道用户可以 1) 购买产品,2) 对产品发表评论。为此,我们需要编写两个 BDD 测试。

首先,我们可以创建占位符并使用标准的@wip 标签将每个测试标记为正在进行中。

我有两个相关的问题:

是否可以让 Behat 报告场景总数以及具有给定标签(即@wip)的场景总数?

即使您使用过滤器“~@wip”忽略这些测试,Behat 是否有可能知道该计数?

4

1 回答 1

0

您可以使用挂钩来获取有关场景的信息,包括它们的标签,但是您只能在@beforeFeature或中执行此操作@beforeSuite

不幸的是,这意味着它不会报告带有被过滤掉的标签的场景。

这是我最初的解决方案。

class Context extends BehatContext {

    protected static $scenarioCount = 0;

    protected static $scenarioCountWip = 0;

    /**
     * Count scenarios and WIP
     * @BeforeScenario
     */
    public function countScenario(Behat\Behat\Event\ScenarioEvent $scenario)
    {
        self::$scenarioCount++;
        if(in_array('wip', $scenario->getScenario()->getTags())) {
            self::$scenarioCountWip++;
        }
    }

    /**
     * @AfterSuite
     */
    public static function coverageReport()
    {
        echo 'Scenarios:      '.self::$scenarioCount.PHP_EOL;
        echo ' - in progress: '.self::$scenarioCountWip.PHP_EOL;
        echo ' - coverage:    '.(100/self::$scenarioCount)*(self::$scenarioCount-self::$scenarioCountWip).PHP_EOL;
        echo PHP_EOL;
    }

}

功能文件:

Feature: Test Count

  @wip
  Scenario: Work in progress

  @someTag
  Scenario: Scenarion with tag

  Scenario: Final scenario

运行所有测试时的结果:

Feature: Test Count

  @wip
  Scenario: Work in progress

  @someTag
  Scenario: Scenarion with tag

  Scenario: Final scenario

Scenarios:      3
 - in progress: 1
 - coverage:    66.666666666667

3 scenarios (3 passed)
No steps

这是@wip过滤掉的结果:

Feature: Test Count

  @someTag
  Scenario: Scenarion with tag

  Scenario: Final scenario

Scenarios:      2
 - in progress: 0
 - coverage:    100

2 scenarios (2 passed)
No steps

我会留下这个问题,希望有人找到更好的解决方案。

于 2014-10-22T13:36:14.887 回答