質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

Q&A

1回答

3189閲覧

phpunitで関数が実行されたかどうかを判定したい

n_oshiumi

総合スコア16

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

0グッド

0クリップ

投稿2018/08/03 04:02

#やりたいこと

phpunitで関数が実行されたかどうかを判定したいです。
if文で、エラーを吐き出す関数を実行するか、スルーするかというコードで、実際にエラー条件の時にエラーを吐き出す関数を実行するかどうかをテストします。

#コード

テストしたいコード

namespace App\Controllers; class aaaaController extends \Base\Controller { public function runAction($Id1, $Id2) { if (!$this->request->hasFiles()) { $this->_setErrorContent('ファイルを選択', 'snackbar'); } } ``` テストコード(現時点でできているところまで) ``` class aaaaaControllerTest extends \UnitTestCase { public function testsFileUploadError() { //コントローラーのモックを作る $mockController = $this->getMockBuilder(\App\Controllers\aaaaController::class) ->setMethods(['runAction']) ->getMock(); //リクエストをfalseにする $mockaaaaController->request = new class { public function hasFiles() { return false; } }; //あとは_setErrorContent関数が実行されたかどうかを判定したい } ``` #備考 _setErrorContentは、BaseControllerで定義されているんですが、そちらまで追ってテストしようとしましたが、うまくいきませんでした。 代替案として、関数が実行されたかどうかのテストをしたら解決できるのでは?と思い、質問させていただいています。 検索してもほとんど出てこないため、もしかしたら関数が実行されたかどうかのテスト自体できない可能性もありますが、ご存知の方教えてください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

この場合、該当関数の呼び出しが検証の目的として、実際に関数は呼び出さずmockを使った検証をします。
通過が検証の可否なのでコールバック( $this->callback )を使った検証になるでしょう。

詳しくは以下のサイトを参照してください。
PHPUNIT_MOCK

投稿2018/08/03 05:32

namda

総合スコア705

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問