我正在使用CakePHP 2.x,我想写单元测试。在控制器中,有几个位置存在从配置文件读取的内容,例如:
$dInterval = Configure::read('myapp.dinterval');
有没有办法在测试中模拟该值?
bvuwiixz1#
不,这样一个硬编码的静态调用是不能被模拟的,至少在应用程序、框架和PHP的一般工作环境中是不能的。从技术上讲,可以使用一个别名类来创建静态调用的模拟,但是这需要在测试环境之外设置别名,因为它需要在原始类被加载之前发生。但是,您可以做的只是在测试操作之前写入配置,例如
Configure::write('myapp.dinterval', 123); $result = $this->testAction(/* ... */);
原始配置在每次测试 * 之前 * 进行备份,并在每次测试 * 之后 * 进行恢复。
1条答案
按热度按时间bvuwiixz1#
不,这样一个硬编码的静态调用是不能被模拟的,至少在应用程序、框架和PHP的一般工作环境中是不能的。从技术上讲,可以使用一个别名类来创建静态调用的模拟,但是这需要在测试环境之外设置别名,因为它需要在原始类被加载之前发生。
但是,您可以做的只是在测试操作之前写入配置,例如
原始配置在每次测试 * 之前 * 进行备份,并在每次测试 * 之后 * 进行恢复。