laravel单元测试学习笔记

本文详细介绍了在laravel中进行单元测试的一些关键点,包括异常测试、使用mockery进行mock操作、处理数据库连接过多问题、@depends和@dataProvider的使用场景,以及如何处理cookie相关测试等实战经验。
摘要由CSDN通过智能技术生成

1) 异常测试

    使用背景:为了使业务逻辑更严谨,在bll文件中经常会有各种if else语句并抛异常,而在写对应的单元测试时,我们要考虑到每种情况,并试图提高覆盖率。

    方法:使用setExpectedException()方法来设定所预期的异常。

    例:测试gold/backend/app/Bll/Zc/House.php的changeRoom方法          

              /**

* @dataProvider providerOverride
*/
public function testChangeRoom($userId, $houseId, $targetRoomId, $exception)
{
         $noneChange = $this->bllHouse->changeRoom(45520, 1, 2); //不用更换
         $this->assertTrue($noneChange, 'Change Room Failed.');
         $changeSuccess = $this->bllHouse->changeRoom(45520, 1, 1); //更换成功
         $this->assertTrue($changeSuccess, 'Change Room Failed.');
         $this->setExpectedException($exception);
         $this->bllHouse->changeRoom($userId, $houseId, $targetRoomId);
}

public function providerOverride()
{
         return array(
               array(45520, 1, 3, 'Gold\Exceptions\SystemException\ZcException'),//房产不可选
               array(45520, 1, 4, 'Gold\Exceptions\SystemException\ZcException'),//无此目标房产
               array(440, 1, 1, 'Gold\Exceptions\SystemException\ZcException'),//无对应用户房产信息
          );

}

          针对bll文件中的changeRoom方法,每种情况的异常测试都已覆盖到,去查看覆盖率时,你会发现并不是100%。

          原因:是在捕获到预期的异常时,测试便不会继续运行,故if语句的‘}’总会显示未被覆盖(如下图示)。

          解决办法:在改语句后面加上“@codeCoverageIgnore”,把改行忽略掉。(为了率概率,有种作弊的感觉,有木有。。。)

          另外,对于非常简单的方法,比如方法中只有一条return语句,并返回常量,可以不写单测,直接在方法的注释上面加上“@codeCoverageIgnore”,这样在统计覆盖率时就会忽略该方法。

         

         

 

2)mockery的使用(文档链接:http://docs.mockery.io/en/latest/reference/startup_methods.html

     为什么要mock?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值