0
有沒有辦法模擬/覆蓋內置功能shell_exec
PHPUnit
。我知道Mockery
,我不能使用除PHPUnit
之外的其他庫。我嘗試了3個多小時,並在某處卡住了。任何指針/鏈接將不勝感激。 我正在使用Zend-framework2
PhpUnit模擬內置功能
有沒有辦法模擬/覆蓋內置功能shell_exec
PHPUnit
。我知道Mockery
,我不能使用除PHPUnit
之外的其他庫。我嘗試了3個多小時,並在某處卡住了。任何指針/鏈接將不勝感激。 我正在使用Zend-framework2
PhpUnit模擬內置功能
有幾種選擇。例如,您可以在測試作用域的名稱空間中重新聲明php函數shell_exec
。
檢查參考這個偉大的博客文章:PHP: 「Mocking」 built-in functions like time() in Unit Tests。
<php
namespace My\Namespace;
/**
* Override shell_exec() in current namespace for testing
*
* @return int
*/
function shell_exec()
{
return // return your mock or whatever value you want to use for testing
}
class SomeClassTest extends \PHPUnit_Framework_TestCase
{
/*
* Test cases
*/
public function testSomething()
{
shell_exec(); // returns your custom value only in this namespace
//...
}
}
現在,如果你使用的全局shell_exec
在My\Namespace
類內部功能將使用您的自定義shell_exec
函數。
只有當您的測試腳本和實際腳本位於相同的命名空間時,您的方法纔有效。我的命名空間位於單獨的命名空間中。 – Thabung
爲此,您的測試的名稱空間應與SUT(被測系統)的名稱空間相匹配。這是一種常見的方法。另請參閱[此問題](http://stackoverflow.com/q/8313283/1697459)或[此問題](http://stackoverflow.com/q/12117254/1697459)以供參考。 – Wilt
不錯的方法;) – hassan