laravel框架下使用phpunit出现Fatal error: Cannot redeclare xxxx() (previously declared in...错误的解决

在laravel框架下运行phpunit测试时遇到'Cannot redeclare'错误。问题源于每个测试案例都包含了重复的函数定义。解决方案是将这些函数封装到类中作为方法,确保良好的代码风格,以避免在多测试案例执行时产生函数重定义的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题,今日想要在laravel框架下运行一下测试案例,关于laravel的单元测试说明,请参考laravel phpunit

laravel默认在app/tests文件中给出了测试模板:TestCase.php,以及继承这个类的一个样例测试:ExampleTest.php。在网站目录运行命令行phpunit就能完成测试。

然后我想在不变这两个文件的基础上,自己新建一个测试案例,在完成了一个最简单的测试文件后,我再次运行phpunit命令,这时候问题来了:

Fatal error: Cannot redeclare change_config() (previously declared in F:\vir\gbl
og\app\controllers\Assists\assist.php:17) in F:\vir\gblog\app\controllers\Assist
s\assist.php on line 29

找到对应代码,发现17行是一个直接定义的函数,没有被封装为类方法,说到这里各位看官可能已经明白,愚拙的我在找到一个国外的论坛帖后幡然醒悟,链接如下: 点击打开链接

也就是说,每个测试案例都会完整地模拟这个测试案例,包括网站环境的配置,多于一个测试案例被执行时,重复执行了相同的部分,这个部分里面定义了函数,自然这个函数就被重定义了。如果把函数封装在类里面作为类的方法,这个问题就得以解决,所以希望用phpunit进行单元测试,就需要良好的代码风格。

避免使用

...function(...){
...
}
使用
class{
...function(...){
    ...
}
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值