在 Codeception 中为单元测试套件添加自定义 Helper 方法的正确方法是什么?

What's the right way to add a custom Helper method for unit test suite in Codeception?

我正在尝试向单元测试套件添加自定义帮助程序方法,但是在 运行 测试时出现 Fatal error: Uncaught ArgumentCountError: Too few arguments to function 错误。

这是我目前所拥有的

  1. 将方法添加到_support/Helper/Unit.php
  2. 运行 构建命令
  3. 在 suite.yml
  4. 中设置演员
  5. 通过actor调用方法
  6. 运行 测试

当我 运行 我得到的测试:

ArgumentCountError: Too few arguments to function ExampleTest::__construct(), 0

_support/Helper/Unit.php:


namespace Helper;

// here you can define custom actions
// all public methods declared in helper class will be available in $I

class Unit extends \Codeception\Module
{
  public function get_hello()
  {
    return 'Hello';
  }
}

测试方法:

public function testMe1(\UnitTester $I)
{
  $hello = $I->get_hello();
  $this->assertEquals(2, $hello);
}
# Codeception Test Suite Configuration

#

# Suite for unit (internal) tests.

class_name: UnitTester
modules:
  enabled:
    - Asserts
    - \Helper\Unit

为什么 testme1() 不接受任何参数?我错过了哪一步?

单元测试方法不会将 actor 作为参数传递。

您可以在 $this->tester 给他们打电话,就像在 this example

function testSavingUser()
{
    $user = new User();
    $user->setName('Miles');
    $user->setSurname('Davis');
    $user->save();
    $this->assertEquals('Miles Davis', $user->getFullName());

    $this->tester->seeInDatabase('users', ['name' => 'Miles', 'surname' => 'Davis']);
}

来自@Naktibalda 的答案对于集成测试是正确的,而不是对于单元测试。

我发现在单元测试中获取模块方法的唯一方法是使用 getModule() 方法:

public function testSomethink()
{
    $this->getModule('Filesystem')->openFile('asd.js');
}

通过这种方式,您也可以加载自定义模块。

如果没有,您可以在单元测试中重用一些代码,为所有单元测试创​​建一些父级 class。有点像 BaseUnitTest,它从 Codeception\Test\Unit 扩展而来。并在此 class.

中编写您的可重用代码