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

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

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

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

PHPUnit

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

Q&A

解決済

2回答

5590閲覧

PHPUnitのassertは関数につき1つにすべきか?

takets

総合スコア43

PHP

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

PHPUnit

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

3グッド

2クリップ

投稿2016/05/11 10:21

php

1public function Test() { 2$a = 10; 3$this->assertEquals('10', $a); 4$this->assertEquals('11', $a); 5$this->assertEquals('12', $a); 6}

上のコードでphpunitを実行した際、
すべてのアサーションが実行されずに、
$this->assertEquals('11', $a);
でアサーションの処理が止まってしまいます。
期待する動作はすべてのアサーションが実行され、
1 success, 3 assersions, 2 failureとなるはずが、
1 success, 3 assersions, 1 failureになってしまいます。

アサーションを複数の関数にに分割すれば期待通りのテスト結果となりますが、
コードが冗長になる(バリデーション関数で境界条件を調べたいときなど)ため、
1つの関数に複数のアサーションを記述できればと考えています。

上記のような場合、どのような設定ををすれば期待した動作になるでしょうか。
あるいは、そもそも上記のような書き方はしてはいけないのなのでしょうか。

nnssn, h-ishiwata, ikuwow👍を押しています

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

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

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

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

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

guest

回答2

0

ベストアンサー

例えば次のようなものということでしょうか?

php

1class OreTest extends PHPUnit_Framework_TestCase 2{ 3 public function test() 4 { 5 $a = 9; 6 $this->assertGreaterThan(10, $a); 7 $this->assertLessThan(15, $a); 8 } 9}
: Failed asserting that 9 is greater than 10. : FAILURES! Tests: 1, Assertions: 1, Failures: 1.

assertThatlogicalAnd で次のように書くこともできます。

php

1class OreTest extends PHPUnit_Framework_TestCase 2{ 3 public function test() 4 { 5 $a = 9; 6 $this->assertThat($a, $this->logicalAnd( 7 $this->greaterThan(10), 8 $this->lessThan(15) 9 )); 10 } 11}
: Failed asserting that 9 is greater than 10 and is less than 15. : FAILURES! Tests: 1, Assertions: 2, Failures: 1.

投稿2016/05/11 11:50

ngyuki

総合スコア4514

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

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

takets

2016/05/12 09:09

知りたかったのはこれです。ありがとうございました!
guest

0

基本的に、1つのテストは「同じ意味」のものをまとめるようにします(たとえば、「このメソッドに無関係な型のオブジェクトを渡したら例外を投げる」ような場合に、オブジェクトの型違いの3つをまとめるなど)。

そして、xUnit系のテストは、最終的にすべて通すことようにするのが前提なので、「何かの加減で失敗することが多い部分」については、最終的に仕上がるまでは別なテストに隔離しておいたほうがいいかもしれません。

投稿2016/05/11 11:01

maisumakun

総合スコア145183

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

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

takets

2016/05/12 09:09

基本的にグリーンを維持することが主眼だから、途中で止まったら修正すべきであるため、 別に途中で止まってもかまわないのですね。 また、別テストに隔離というのは考えなかったので、参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問