[システム環境]
PHP 5.6
Fuel 1.8
AspectMock
[やりたいこと1−1]
UnitTestを実施したいfunction(仮にfuncMain()とします)がありまして、その中で、date関数のような標準関数を使用しているfunction(funcSub())があります。
(→date()は、現在日付からyyyymmdd文字列を取得することが目的)
この標準関数の日付を、UT実施時は固定の日付にしたいのですが、何か方法はありますでしょうか?
※両functionを含むクラスのnamespaceは定義しておりません。
[やりたいこと1−2]
UT実行時だけ、funcSub()の第二引数(=オプション引数)に固定で、値をセットする方法はないでしょうか?
その場合、第一引数には、通常実行時と同様に動的に変わる値がセットしたいです。
funcSub()自体は、通常処理させようとしています。(スタブではなく、第二引数だけ固定)
[sampleClass.php] // UT対象のfunctionを含むクラス <?php class Model_Sample extends Model { private static function funcMain() { ... $xxx = funcSub($arg1); ... } private static function funcSub($arg1, $arg2=null) { ... if (is_null($arg2)) { $now = date('Ymd'); } else { $now = substr($arg2, 0,8); } ... } }
[sampleClassTest.php] <?php use AspectMock\Test as test; use Fuel\Core\TestCase; class TestModel_Sample extends TestCase { private static function testFuncMain($params) { ... (#1) // 実行はinvoke経由 $method->invoke($sampleClass, $params) ... } }
[試したこと 1-1]
(#1)に、test::func(NAMESPACE, 'date', '20190801');
をセットしてみましたが、不可でした。
override_functionを使う案は、APDのインストールが必要なので、不採用にしております。
https://ja.stackoverflow.com/questions/30598/phpで標準関数をモック化したい
[試したこと1-2]
AspectMockのdouble()のclousureで自身を返そうとしましたがエラーになりダメでした。
test::double('\Model_Sample', ['funcSub' => function ($arg) { ... return funcSub($arg1, $arg2); }

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/08/21 05:22