这不是我要问的问题,因为有些东西被打破了。更多的是我想知道在这种情况下该怎么做。
如果我写了以下模型,
class Amenity extends AppModel {
var $name = 'Amenity';
/**
* Behaviors used by the Model
*
* @var array
* @access public
*/
var $hasAndBelongsToMany = array(
'RoomFlat' =>
array(
'className' => 'RoomFlat',
'joinTable' => 'amenities_room_flats',
'foreignKey' => 'amenity_id',
'associationForeignKey' => 'room_flat_id',
)
);
var $actsAs = array(
'Multivalidatable'
);
/**
* Custom validation rulesets
*/
var $validationSets = array(
'admin'=>array(
'name'=>array(
'notEmpty'=>array(
'rule'=>'notEmpty',
'message'=>'This is required'
),
'isUnique'=>array(
'rule'=>'isUnique',
'message'=>'This already exists.'
)
),
)
);
}
我还写了以下装置
class AmenityFixture extends CakeTestFixture {
public $fields = array(
'id' => array('type' => 'integer', 'key' => 'primary'),
'name' => array('type' => 'text', 'null' => 'false'),
'status' => array('type' => 'tinyint', 'null' => 'false'),
'created' => array('type' => 'datetime', 'null' => 'false'),
'modified' => array('type' => 'datetime', 'null' => 'false')
);
public function init(){
$this->records = array(
array('id' => 1, 'name' => 'amenity fixture 1', 'status'=>'1', 'created' => date('Y-m-d H:i:s'), 'modified' => date('Y-m-d H:i:s')),
array('id' => 2, 'name' => 'amenity fixture 2', 'status'=>'0', 'created' => date('Y-m-d H:i:s'), 'modified' => date('Y-m-d H:i:s')),
array('id' => 3, 'name' => 'amenity fixture 3', 'status'=>'1', 'created' => date('Y-m-d H:i:s'), 'modified' => date('Y-m-d H:i:s')),
array('id' => 4, 'name' => 'amenity fixture 4', 'status'=>'0', 'created' => date('Y-m-d H:i:s'), 'modified' => date('Y-m-d H:i:s')),
array('id' => 5, 'name' => 'amenity fixture 5', 'status'=>'1', 'created' => date('Y-m-d H:i:s'), 'modified' => date('Y-m-d H:i:s')),
);
parent::init();
}
}
测试它的最佳方法是什么?我在模型中没有任何功能可以测试吗?这种情况你真的不会对任何东西进行单元测试吗?如果你告诉我为此写一个测试套件,你会怎么做我的?
我也在使用cakePHP,是的,我已经阅读了测试页面(http://book.cakephp.org/2.0/en/development/testing.html)。但我真的想要理解为什么要做的事情而不是如何做。如果有人可以推荐任何好书或文章,那也会有所帮助。
如果我需要发布任何其他详细信息,请告诉我。
答案 0 :(得分:2)
你的问题在评论中得到了很好的回答,但为了清楚起见,这里是一个答案。
这是您没有对模型进行任何测试的情况。大多数情况下,您只需要测试一个对象的公共方法,而这里没有任何公共方法。如果您有这样的方法:
class Amenity extends AppModel
{
public function doSomething($one, $two, $three)
{
// ...
}
}
然后,您需要使用$one
,$two
和$three
的不同组合编写测试。但是测试Model::find()
方法等模型函数没有任何意义,因为它们被蛋糕自己的测试所覆盖。
最后,我将从评论中引用deceze:
所有业务逻辑都应该表示为模型方法。
这是一个非常重要的概念,无论是测试还是清晰度。
有关详情,请参阅:fat models,skinny controllers。
答案 1 :(得分:0)
当然你可以测试那些模型。因为实际上,他们有方法(他们的父模型)。
但是,只有涵盖基础知识(读/写)才有意义。断言表是否正确设置等 - 所以可能有一些save()和find()测试。 您也可以测试正确设置关系(在您的情况下为HABTM)或您的验证规则。
蛋糕测试可能已经涵盖了其他所有内容。
答案 2 :(得分:0)
当谈到Cakephp时,可以/应该对其他两个方面进行单元测试:
为什么?因为如果模型中的任何字段名称或类型更改,它将检测代码回归。
我特别关注输入和命名 assert(),因为当然会发生回归(多个开发人员,多个版本),否则您将很难检测到这一点
希望这有帮助!