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

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

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

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

Q&A

2回答

2565閲覧

テストコードを動的なものに変更したい

imamoto_browser

総合スコア1161

PHPUnit

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

0グッド

0クリップ

投稿2015/03/06 13:54

下記のようなテストコードでHoge.phpをテストする際、1,2以外の値もすべて(たとえば1,3とか100,90)も一度にテストするにはどのようなテストコードを書けばいいですか。

<?php class HogeTest extends PHPUnit_Framework_TestCase { public function testDoSomething() { $method = new ReflectionMethod( 'Hoge', 'doSomething' ); $method->setAccessible(true); $this->assertEquals(3, $method->invokeArgs(new Hoge(), array(1,2))); } }

Hoge.php

<?php class Hoge { public function __construct() { } private function doSomething($a, $b) { return $a + $b; } // テストでは使うけど、実際には使わない public function doSomething2($a, $b) { return $this->doSomething($a, $b); } }

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

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

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

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

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

guest

回答2

0

@dataProvider を使うと良いと思います。

lang

1<?php 2class HogeTest extends PHPUnit_Framework_TestCase 3{ 4 /** 5 * @dataProvider dataProvider 6 */ 7 public function testDoSomething($expect, $a, $b) 8 { 9 $method = new ReflectionMethod( 10 'Hoge', 'doSomething' 11 ); 12 $method->setAccessible(true); 13 $this->assertEquals($expect, $method->invokeArgs(new Hoge(), array($a, $b))); 14 } 15 16 public function dataProvider() 17 { 18 return array( 19 "1 + 2" => array(3, 1, 2), 20 "1 + 3" => array(4, 1, 3), 21 "100 + 90" => array(190, 100, 90), 22 ); 23 } 24}

https://phpunit.de/manual/current/ja/writing-tests-for-phpunit.html#writing-tests-for-phpunit.data-providers

投稿2015/03/06 16:51

ngyuki

総合スコア4514

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

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

0

for文を回せば良いと思います。

$cases = [
["expect" => 4, "arg1" => 1, "arg2" => 3],
["expect" => 8, "arg1" => 2, "arg2" => 6],

["expect" => 190, "arg1" => 100, "arg2" => 90]
];

$hoge = new Hoge();

foreach($cases as $case){
$this->assertEquals($case["expect"], $hoge->doSomething($case["arg1"], $case["arg2"]));
}

投稿2015/03/06 15:55

編集2015/03/06 15:56
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問