Dod*_*uma 4 php phpunit unit-testing mocking
我有一个有趣的问题,并在互联网上搜索过,但还没有找到答案。
我在一家不允许员工使用 OOP 的公司工作,这有点荒谬,但工作经验很宝贵。
考虑以下函数:
function get_setting_values_from_file( $parameter )
{
exec("/usr/var/binary --options $parameter", $output, $return);
$settings = file( $output[0] );
foreach( $settings as $setting ) {
if( strstr( $setting, "color") ) {
$setting = explode( ":", $setting );
return $setting[1];
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
我需要对类似的功能进行单元测试。我目前正在使用 phpUnit 进行测试,并使用 vfsStream 库来模拟文件系统,但是exec("/usr/var/binary --options $parameter", $output, $return)
当我在无法访问实际系统的情况下进行开发时,如何模拟调用?处理此类测试用例的推荐方法是什么?
感谢所有反馈。
您可以exec()
使用函数模拟库进行模拟。我php-mock
为你做了一个 ( ) ,它需要你使用命名空间
namespace foo;
use phpmock\phpunit\PHPMock;
class ExecTest extends \PHPUnit_Framework_TestCase
{
use PHPMock;
public function testExec()
{
$mock = $this->getFunctionMock(__NAMESPACE__, "exec");
$mock->expects($this->once())->willReturnCallback(
function ($command, &$output, &$return_var) {
$this->assertEquals("foo", $command);
$output = "failure";
$return_var = 1;
}
);
exec("foo", $output, $return_var);
$this->assertEquals("failure", $output);
$this->assertEquals(1, $return_var);
}
}
Run Code Online (Sandbox Code Playgroud)