今天单元测试测到一个有点坑的小问题:
public function testUpdataStatusFailForNegative() { // // Remove the following lines when you implement this test. // $this->markTestIncomplete( // 'This test has not been implemented yet.' // ); $result = $this->object->updataStatus(['id' => 1], [ 'status' => 'sd', ‘send_time' => 'asdzxc']); $this->assertEquals(false,$result); $queryTable = $this->getConnection()->createQueryTable('wp_template_message_log', 'SELECT * FROM wp_template_message_log'); $expectedTable = $this->createMySQLXMLDataSet(TEST_ROOT . "/data/addons/TemplateMessage/Model/TemplateMessageLogModel/wp_template_message_log.xml") ->getTable("wp_template_message_log"); $this->assertTablesEqual($expectedTable, $queryTable); }
如果你的数据库里要修改的字段是int型而不是string类型,TP里数据更新(save)时,你传入了string类型,TP会把你要更新的字段值强制转换为零而不报错,如果数据没有更新(与原数据相同),数据中影响的条数为零 ,返回值为 0。返回值直接用false来判断的话,单元测试就会不通过,但是数据库里什么都没有改,被坑了好长一段时间。又专门找了一下TP返回值的问题。大家可以看一下:
create返回值:如果创建发生错误,返回false;成功则返回创建的数据。
add 返回值:如果添加发生错误,返回false;成功:如果主键是自动增长型,返回值为新增记录Id值;否则返回true。
delete 返回值:如果删除发生错误,返回false;成功则返回true。
save 返回值: 如果更新发生错误,返回false;成功返回影响的记录数(有可能为0,即数据未改变)。
find 返回值:如果查询发生错误,返回false;查询结果为空返回NULL,查询成功则返回一个关联数组。
select 返回值:如果查询发生错误,返回false;查询结果为空,则返回NULL,否则返回二维数组。
getField 返回值:如果查询发生错误,返回false;
查询成功:getField($field):$field为一个字段,返回该字段的第一行的值;
getField($field,true):$field为一个字段,返回包含该字段的一维数组;
getField($field):$field为多个字段 默认返回一个关联数组,以第一个字段的值为索引;
getField($fields,”:”):$field为多个字段,使用连接符返回的结果则是一个索引数组,键名是id值,键值则是account:nickname连接组成的字符串。
Count 、Max、Min 、Avg 、Sum返回值:如果查询出错返回false;查询成功,则返回对应的值。