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

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

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

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

PHPUnit

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

Q&A

0回答

694閲覧

Mockeryにてoverloadしたクラスの一部メソッドのみをモック化できない

kezo

総合スコア10

PHP

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

PHPUnit

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

0グッド

0クリップ

投稿2019/02/05 06:51

編集2019/02/05 15:32

前提・実現したいこと

PHPUnitでテストコードを書いており、Mockeryライブラリを利用してモックを作成しているのですが、
下記ソースコードで一部メソッドのみをモック化しようとしているのですが、うまくいきません。
もしご存知の方いらっしゃれば教えていただきたいです。
すいませんが宜しくお願い致します。
追記
テストしたいメソッド内でnewでインスタンスを作成しているクラスを一部メソッドをモック化したいのですが、
どうしても利用している他のメソッドもshouldReceiveをしてモック化しないとダメなのです。

下記はサンプルコードです。

該当のソースコード

<?php use \Mockery as M; class TestInfo extends TestCase { private $target; public function setUp() { $this->target = m::mock('overload:Info'); } public function test_doSomeThing_チェックOK() { $infoUse = new InfoUse(); $this->target->shouldReceive('getInfo')->andReturn('成功'); $this->assertEquals('成功5', $info->useInfo()); } } <?php テスト対象クラス class InfoUse { public function useInfo(){ $info = new info(); $result = $info->getInfo(); $result = $result . $info->num(); return $result; } } <?php モック化したいクラス ※getInfoのみモック化したい class Info { public function getInfo(){ $result =DB::connection('mysql_one') ->table('Info') ->leftJoin('migrations AS sti', function($join) { $join->on('Info.id', '=', 'sti.id') ->where('sti.migration', '=', '1'); }) ->select('*')->toSql(); return $result; } public function num(){ $num = 5+2; return $num; } } 下記方法だとエラーで実行すらされません。 $this->infoMock = m::mock('overload:Ingo[getInfo]');

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

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

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

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

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

noka_blank

2019/02/05 12:40

うまくいかない、とありますが、具体的にどのような状態でしょうか? エラーメッセージ等は出ていませんか? メソッドを指定してモックを作成していますが、shouldReceiveがないのでエラーになるとは思いますが、提示されたコード片が全てではないと思いますので、可能な限りコードを全て提示された方が、的確な回答を得やすいと思います。
noka_blank

2019/02/06 00:05 編集

Ingo -> Info と読みかえます。 use \Mockery as M; となっているので、 m::mock('overload:Info'); ではなく M::mock('overload:Info'); が正しいと思います。 コンソールにmが見つからない的なエラーメッセージが出ていないでしょうか?
kezo

2019/02/06 00:12

すいません! 実際のコードが見せられないので、上記はサンプルで作成しました。 失敗するであろう箇所としては、$info->numでモックにメソッドがないと言われエラーがでます。
kezo

2019/02/06 00:14

ですが、モック化したいのは$info->getInfo();だけなのでその為悩んでおります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

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

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

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問