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あなたのMy\Namespace
にクラス内でグローバルshell_exec
機能を使用した場合
<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
機能を使用します。
あなたのアプローチは、テストスクリプトと実際のスクリプトが同じ名前空間にある場合にのみ機能します。Mineは別の名前空間にあります。 – Thabung
これを行うには、テストの名前空間がSUT(テスト対象システム)の名前空間と一致する必要があります。これは一般的なアプローチです。参考までに[この質問](http://stackoverflow.com/q/8313283/1697459)または[この質問](http://stackoverflow.com/q/12117254/1697459)もお読みください。 – Wilt
すてきなアプローチ;) – hassan