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

如题,今日想要在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(...){
    ...
}
}

你可能感兴趣的:(error,laravel,phpunit,unittest,cannot,fatal,redeclare)