【问题标题】:How can I run only one test from a suite?我怎样才能从一个套件中只运行一个测试?
【发布时间】:2014-09-24 07:17:27
【问题描述】:

我在下面有这个测试类,我只想从中运行一个测试,例如“aboutPage”。有什么想法吗?

这就是我只运行这个文件的方式:

codecept run tests/acceptance/VisitorCest.php

但现在我只想从文件中运行一项测试。

<?php
use \AcceptanceTester;

class VisitorCest
{
    public function _before(){}
    public function _after(){}

    public function aboutPage(AcceptanceTester $I)
    {
        $I->wantTo('check about page');
    }

    public function contactPage(AcceptanceTester $I)
    { 
        $I->wantTo('check contact page');
    }
}

【问题讨论】:

    标签: php codeception


    【解决方案1】:

    您只需附加一个冒号和函数名称,如下所示:

    codecept run tests/acceptance/VisitorCest.php:myTestName
    

    或更短的版本:

    codecept run acceptance VisitorCest:myTestName
    

    (注意套件名和文件名之间的空格。)

    【讨论】:

    • 只是一个注释。如果它是 unit 测试(从 PHPUnit_Framework_TestCase 扩展),则无法运行单个测试,因为 codeception 没有 filter选项(不同于 phpunit
    • codecept run unit/TestThatExtendsPHPUnit.php:testMethod 对我来说很好。
    • 你可以省略.php文件扩展名,像这样:codecept run -- -c frontend unit models/ContactFormTest:testSendEmail
    • myTestName 也不必是完整的测试名称。它将运行任何部分匹配的测试
    • 我如何也可以使用依赖项运行?
    【解决方案2】:

    这是有效的:

    codecept 运行 {suite-name} {file-name}.php:{function-name}

    注意套件名和文件名之间的空格

    【讨论】:

    • 从技术上讲,您有更通用的解决方案。但事实证明,大多数人更喜欢看例子。
    • 不需要.php 部分。
    • @tivnet 这仅适用于 Codeception 2.x
    【解决方案3】:

    这就是我所做的。 php codecept.phar run unit UnitNameTest.php

    【讨论】:

    • 与提出的问题无关
    【解决方案4】:

    除了@Tzook Bar Noy 提供的答案,您还可以在有多个以相同名称开头的测试时添加尾随$。考虑以下示例:

    <?php
    
    use \AcceptanceTester;
    
    class VisitorCest
    {
        public function aboutPage(AcceptanceTester $I)
        {
        }
    
        public function aboutPageOption(AcceptanceTester $I)
        { 
        }
    }
    

    以下命令将执行这两个测试:

    codecept run tests/acceptance/VisitorCest.php:aboutPage
    

    这将只执行第一个:

    codecept run tests/acceptance/VisitorCest.php:aboutPage$
    

    【讨论】:

      【解决方案5】:

      除了前面的答案之外,您还可以通过按给定名称分组来运行一种或多种方法:

      /**
       * @group test-aboutPage
       */
      public function aboutPage(AcceptanceTester $I)
      {
          $I->wantTo('check about page');
      }
      

      使用选项-g 和组名:

      $ codecept run acceptance VisitorCest -g test-aboutPage
      

      【讨论】:

      • 我更喜欢稍微不同的方式,因为您可以在这种情况下使用 tab 并轻松导航到所需的 Cest,`codecept run tests/acceptance/VisitorCest -group test-aboutPage`
      【解决方案6】:

      如果您使用的是PHP Yii2 Framework,那么您只能使用此命令运行一个测试。

      确保您在测试目录中。

      cd /codeception/frontend
      
      codecept run -vv acceptance HomeCept
      

      【讨论】:

      • 这与 Yii2 无关,而是因为 Cept 仅包含一个测试,但 Cest 可以包含多个测试 - 请参阅最初的问题
      【解决方案7】:

      试试看 phpunit --filter {TestMethodName} {FilePath}

      【讨论】:

        【解决方案8】:

        执行此操作的更合适的方法是将组注释分配给相关测试用例。由于以下原因,这是优选的; 如果您有两个测试用例,例如在同一类 VisitorCest;

        public function aboutPage
        public function aboutPage2
        

        执行

        codecept run tests/acceptance/VisitorCest.php:aboutPage
        

        将同时运行 VisitorCest:aboutPage 和 VisitorCest:aboutPage2 测试用例。

        将组分配给这样的测试用例

        /**
         * @group aaa
         */
        public function aboutPage(AcceptanceTester $I)
        {
        }
        

        并像这样执行这个特定的测试用例

        codecept run -g aaa

        【讨论】:

          猜你喜欢
          • 2018-07-01
          • 1970-01-01
          • 1970-01-01
          • 2020-09-01
          • 2012-08-23
          • 2015-02-23
          • 2022-11-28
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多