如何测试这个功能?

时间:2014-08-18 06:48:53

标签: php unit-testing phpunit

public static function flush_cache()
{
    static::$_cached_objects[get_class()] = array();
}

我不知道如何用phpunit测试这个? 该项目是一个Fuelphp框架。 你能提出一些建议而不是践踏我的问题吗? 非常感谢

1 个答案:

答案 0 :(得分:2)

没有“正确”的方法来测试它。原因是:你有全球状态!

测试静态值非常困难,因为它们在单元测试之间共享状态(在一次测试运行期间)。因此,一个单元测试可能会干扰另一个单元测试,单元测试的执行顺序变得很重要。

您应该将缓存传递给函数(如依赖注入),而不是使用静态值(除了全局状态之外)。在那种情况下,你会有这样的事情:

public static function flush_cache($cache) {
    $cache = array();
}

// the test function
public function testFlushCache() {
    $myCache = $array();
    // do something which uses the cache, filling up some values.
    flush_cache($myCache);
    $this->assertEquals(count($myCache), 0);
}

当然,您还必须注意在应用程序中实例化缓存。

但我强烈建议避免全局状态,如静态缓存(尽管静态函数是可以的)。拥有全局状态会对PITA进行测试,并且也可能成为奇怪错误的来源,因为每个接入全局变量的函数都会变得不确定。