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

时间:2019-06-26 09:53:15

标签: php unit-testing codeception

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

这是我到目前为止所拥有的

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

运行测试时,我得到:

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()不接受任何参数?我错过了哪一步?

2 个答案:

答案 0 :(得分:1)

单元测试方法不会将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']);
}

答案 1 :(得分:1)

@Naktibalda 的回答适用于集成测试,而不适用于单元测试。

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

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

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

如果没有,您可以在单元测试中重用一些代码,为所有单元测试创​​建一些父类。像 BaseUnitTest 这样的想法,它从 Codeception\Test\Unit 扩展而来。并在此类中编写可重用的代码。