- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 Codeception,我想知道什么时候应该使用 setUp() 或 tearDown() 以及什么时候应该使用 _before() 或 _after()。我看不出有什么区别。这两种方法都在我的测试文件中的单个测试之前或之后运行?谢谢,
最佳答案
正如 Gabriel Hemming 所提到的,setUp() 和 tearDown() 是 PHPUnit 在每次测试运行之前设置环境并在每次测试运行之后拆除环境的方法。 _before() 和 _after() 是 codeception 执行此操作的方式。
为了回答您的问题,关于为什么 codeception 对此有不同的方法集,我建议您引用 codeception 的文档:http://codeception.com/docs/05-UnitTests#creating-test
As you see, unlike in PHPUnit, the setUp and tearDown methods are replaced with their aliases: _before, _after.
The actual setUp and tearDown are implemented by the parent class \Codeception\TestCase\Test and set the UnitTester class up to have all the cool actions from Cept-files to be run as a part of your unit tests.
文档中提到的酷 Action 是现在可以在单元测试中使用的任何模块或帮助程序类。
这是一个很好的例子,说明如何在单元测试中使用模块:http://codeception.com/docs/05-UnitTests#using-modules
让我们举一个在单元测试中设置夹具数据的例子:
<?php
class UserRepositoryTest extends \Codeception\Test\Unit
{
/**
* @var \UnitTester
*/
protected $tester;
protected function _before()
{
// Note that codeception will delete the record after the test.
$this->tester->haveInDatabase('users', array('name' => 'miles', 'email' => 'miles@davis.com'));
}
protected function _after()
{
}
// tests
public function testUserAlreadyExists()
{
$userRepository = new UserRepository(
new PDO(
'mysql:host=localhost;dbname=test;port=3306;charset=utf8',
'testuser',
'password'
)
);
$user = new User();
$user->name = 'another name';
$user->email = 'miles@davis.com';
$this->expectException(UserAlreadyExistsException::class);
$user->save();
}
}
class User
{
public $name;
public $email;
}
class UserRepository
{
public function __construct(PDO $database)
{
$this->db = $database;
}
public function save(User $user)
{
try {
$this->db->prepare('INSERT INTO `users` (`name`, `email`) VALUES (:name, :email)')
->execute(['name' => $user->name, 'email' => $user->email]);
} catch (PDOException $e) {
if ($e->getCode() == 1062) {
throw new UserAlreadyExistsException();
} else {
throw $e;
}
}
}
}
关于installation - PHPUnit 中的 setup() 和 Codeception 中的 _before 有什么区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41934684/
我正在学习 Codeception,我想知道什么时候应该使用 setUp() 或 tearDown() 以及什么时候应该使用 _before() 或 _after()。我看不出有什么区别。这两种方法都
我是一名优秀的程序员,十分优秀!