我应该如何在 CakePHP 3.0 中使用 PHPUnit 测试此行为?
How should I test this behavior using PHPUnit in CakePHP 3.0 ?
我在 BrandBehavior 中有这个方法,我想测试一下。
public function setCurrentBrandId(Entity $entity)
{
if (!isset($entity->brand_id) or empty($entity->brand_id)) {
$entity->brand_id = $this->session->read("Brand.id");
}
}
我想测试一下这个方法是否真的设置了 BrandID。你能给我举个例子吗?我应该如何测试这个?到目前为止,我基本上没有涵盖任何内容。
public function setUp()
{
parent::setUp();
$this->Progress = new BrandsBehavior();
}
public function testSetCurrentBrandId()
{
}
如果您需要任何其他信息,请告诉我,让您知道我是测试和测试的初学者。
首先,行为通常无法访问会话 ($this->session
) - 我假设您将其注入某处。在这种情况下,您可以模拟会话对象并对其进行测试(您可以阅读有关模拟的内容 here)。
其次,\Cake\ORM\Behavior::__construct
的方法签名是 Table $table, array $config = []
- 这意味着您需要稍微更改 setUp
方法。 This应该给点意见吧
第三,测试是关于验证 function/method 是否按照您的预期执行(基于输入)。因此,对于实际测试,您可以给它两个实体(一个有 brand_id
字段,另一个没有)和 assertEquals
调用此方法后 brand_id
字段的新值
此外,还有一些提示:
!$entity->has('field_name')
是 !isset($entity->brand_id) or empty($entity->brand_id)
的快捷方式
- 将会话对象注入行为不是一个好主意。虽然它有一个明显的用途,但我建议您将实际值注入到行为中,或者(如果您需要从会话中读取的函数)将其移动到一个组件中。
- 与其将
"Brand.id"
硬编码为要读取的会话密钥,不如考虑将其作为配置密钥
我在 BrandBehavior 中有这个方法,我想测试一下。
public function setCurrentBrandId(Entity $entity)
{
if (!isset($entity->brand_id) or empty($entity->brand_id)) {
$entity->brand_id = $this->session->read("Brand.id");
}
}
我想测试一下这个方法是否真的设置了 BrandID。你能给我举个例子吗?我应该如何测试这个?到目前为止,我基本上没有涵盖任何内容。
public function setUp()
{
parent::setUp();
$this->Progress = new BrandsBehavior();
}
public function testSetCurrentBrandId()
{
}
如果您需要任何其他信息,请告诉我,让您知道我是测试和测试的初学者。
首先,行为通常无法访问会话 ($this->session
) - 我假设您将其注入某处。在这种情况下,您可以模拟会话对象并对其进行测试(您可以阅读有关模拟的内容 here)。
其次,\Cake\ORM\Behavior::__construct
的方法签名是 Table $table, array $config = []
- 这意味着您需要稍微更改 setUp
方法。 This应该给点意见吧
第三,测试是关于验证 function/method 是否按照您的预期执行(基于输入)。因此,对于实际测试,您可以给它两个实体(一个有 brand_id
字段,另一个没有)和 assertEquals
调用此方法后 brand_id
字段的新值
此外,还有一些提示:
!$entity->has('field_name')
是!isset($entity->brand_id) or empty($entity->brand_id)
的快捷方式
- 将会话对象注入行为不是一个好主意。虽然它有一个明显的用途,但我建议您将实际值注入到行为中,或者(如果您需要从会话中读取的函数)将其移动到一个组件中。
- 与其将
"Brand.id"
硬编码为要读取的会话密钥,不如考虑将其作为配置密钥