Php 有没有办法用静态变量对函数进行单元测试?

Php 有没有办法用静态变量对函数进行单元测试?,php,unit-testing,reflection,phpunit,Php,Unit Testing,Reflection,Phpunit,有没有一种方法可以测试包含静态变量的函数 比如说, class-MyClass{ 公共函数my_method(){ 静态$ready_called=false; 如果($已被调用){ 返回; } 回声“你好世界”; $ready_=true; } } my_method()将只打印一次Hello world,无论调用多少次 $instance=new MyClass(); $instance->my_method(); $instance->my_method(); 产出: Hello wo

有没有一种方法可以测试包含静态变量的函数

比如说,

class-MyClass{
公共函数my_method(){
静态$ready_called=false;
如果($已被调用){
返回;
}
回声“你好世界”;
$ready_=true;
}
}
my_method()
将只打印一次
Hello world
,无论调用多少次

$instance=new MyClass();
$instance->my_method();
$instance->my_method();
产出:

Hello world
只有一次测试


@runinsepareprocess
很可能是在不更改现有代码的情况下回避问题的唯一方法。也许您可以禁用
@preserveGlobalState
以消除上述错误。我曾经遇到过这个问题,简单的解决方法是我编程不好(如果您需要依赖的静态变量(public))。我有7年以上的经验,我几乎从不需要静态变量,即使是复杂的东西。。。但简单的回答是你不能(至少以正常的方式)。因此,我建议您改变您的方法,并尽可能多地删除静态变量。
self
static
没有问题,但是尽量限制它,尽可能多地使用。@matiaslauriti我完全同意你的看法。在我的例子中,我处理的是遗留代码,我正在慢慢地重构。我只想在过多修改代码之前编写一些单元测试。@overengineer哦,听你这么说太棒了!首先要进行测试,然后才能进行重构!令人惊叹的!
MyMethod
 ✔ Should print hello world exactly one time
MyMethod
 ✔ Should print hello world
 ✘ Should print hello world exactly one time
   │
   │ Failed asserting that two strings are equal.
   │ --- Expected
   │ +++ Actual
   │ @@ @@
   │ -'Hello world'
   │ +''
   │
MyMethod
 ✔ Should print hello world
 ✔ Should print hello world exactly one time
PHP Fatal error:  Uncaught Exception: Serialization of 'ReflectionClass' is not allowed in phar:///usr/local/bin/phpunit/phpunit/Util/GlobalState.php:151