在 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
错误。
这是我目前所拥有的
- 将方法添加到_support/Helper/Unit.php
- 运行 构建命令
- 在 suite.yml
中设置演员
- 通过actor调用方法
- 运行 测试
当我 运行 我得到的测试:
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.
中编写您的可重用代码
我正在尝试向单元测试套件添加自定义帮助程序方法,但是在 运行 测试时出现 Fatal error: Uncaught ArgumentCountError: Too few arguments to function
错误。
这是我目前所拥有的
- 将方法添加到_support/Helper/Unit.php
- 运行 构建命令
- 在 suite.yml 中设置演员
- 通过actor调用方法
- 运行 测试
当我 运行 我得到的测试:
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.
中编写您的可重用代码