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

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

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

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

PHPUnit

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

Q&A

解決済

1回答

407閲覧

UnitTestでのMock化について

tenpu

総合スコア40

PHP

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

PHPUnit

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

FuelPHP

FuelPHPは、軽量高速で開発が可能なPHPのWebアプリケーションフレームワークです。

1グッド

2クリップ

投稿2018/09/20 01:41

編集2018/09/20 02:47

php 5.6、 Fuel 1.8にて開発をしております。
また、モッキングフレームワークはAspectMockを利用しております。

fuel/app/vendor下にcomposer経由で取り込んだパッケージがあり、
その中のメソッドをUnit TestのためにMock化したいのですが、制約?などでうまくいかず困っております。

また、Mock化下メソッドでは、例外スローも行いたいです。

以下を検証しましたが、いずれもNGのようでして、何か問題箇所、別の対応方法はあるでしょうか?

AspectMock

vendor下のMock化はKernel再初期化やphpunit.xmlの設定検証が必要。
例外スローできない。

getMockBuilder()、createMock()

モック化したいクラスをhogeclassとします。

■ 実際のクラス <?php use Fuel\Core\Model; use xxx\yyy\HogeClass; // Mock化したいクラス class Model_aaaaa extends Model { ... public function sample_func(){ ... $hogeclass = new HogeClass(); $hogeclass ->doSomething(); // Mock化したいメソッド ... } ?>
■ testクラス <?php use PHPUnit\Framework\TestCase; class StubTest extends TestCase { public function testStub() { // SomeClass クラスのスタブを作成します $stub = $this->getMockBuilder('HogeClass') ->disableOriginalConstructor() ->disableOriginalClone() ->disableArgumentCloning() ->disallowMockingUnknownTypes() ->getMock(); // スタブの設定を行います $stub->method('doSomething') ->willReturn('foo'); $this->assertEquals('foo', $stub->doSomething()); } } ?>

// oilでunit test実行 → エラー Cannot stub or mock class or interface "HogeClass" which does not exist
Chocopun👍を押しています

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

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

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

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

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

guest

回答1

0

自己解決

直近で対応する必要がなくなったため、解決とします。

投稿2022/09/01 23:17

tenpu

総合スコア40

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問