teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

`Risky: 3`ご指摘へのリプライとして、質問に「補足」「コード」を追記しました。

2017/09/26 04:23

投稿

utatane
utatane

スコア26

title CHANGED
File without changes
body CHANGED
@@ -40,4 +40,43 @@
40
40
  それと、各ケース内でログ出力だけではなく簡単なアサーションを1つ実行してもいます。つまりテストランナーが実行事前にケース内を解釈して実行不要(アサーションなし)だから実行しておらずログ出力されない、ということもないと考えています。
41
41
 
42
42
 
43
- なんとなく、各ケース内でテストコンテキスト?を毎回初期化すると良いような感覚を持ちました。標題と少しズレますが、複数のケースがあって連続して実行されるとき、ケース内での状態はコンテキストとして次のケースに持ち越されて実行されているのでしょうか。初期化方法などあるでしょうか。
43
+ なんとなく、各ケース内でテストコンテキスト?を毎回初期化すると良いような感覚を持ちました。標題と少しズレますが、複数のケースがあって連続して実行されるとき、ケース内での状態はコンテキストとして次のケースに持ち越されて実行されているのでしょうか。初期化方法などあるでしょうか。
44
+
45
+
46
+ ### 補足
47
+
48
+ `Risky: 3` は、「テストケース内にアサーションが1つもない(のでパスしているとは言えず危険な)」ケースが3つあるという指摘です。
49
+ ログ出力は入れても入れなくても同じで、`$this->assertTrue(true);`のようなアサーションを入れると指摘が収まります。
50
+ また、アサーションを入れて`Risky`を抑えても、最初に実行されるケースでしかログ出力されない状況は変わりません。
51
+
52
+ 例として単純化するためにアサーションを入れませんでした。
53
+ `Tests: 3, Assertions: 0, Risky: 3.`
54
+ の `Risky` は問題でなく、`Tests: 3`で期待どおり3ケースすべて実行されている(のにログ出力は最初だけな)ことをお伝えするため示しております。
55
+
56
+
57
+ ### コード
58
+
59
+ 以下は当件テストコード全文です。
60
+ Laravel インストール時につくられる `ExampleTest.php` のメソッドだけを編集したコードになります。
61
+
62
+ ```php
63
+ <?php
64
+
65
+ namespace Tests\Unit;
66
+
67
+ use Tests\TestCase;
68
+ use Illuminate\Foundation\Testing\RefreshDatabase;
69
+
70
+ class ExampleTest extends TestCase
71
+ {
72
+ public function testA() {\Log::info('A');$this->assertTrue(true);}
73
+ public function testB() {\Log::info('B');$this->assertTrue(true);}
74
+ public function testC() {\Log::info('C');$this->assertTrue(true);}
75
+ }
76
+ ```
77
+
78
+ ご興味持って頂けたかたは、上記全文をそのまま `プロジェクトディレクトリ/tests/SampleTest.php` のようなファイル名で保存して実行してみてください。
79
+ `storage/logs/`内のログファイルには`"A"`としか出力されないはずです。
80
+ ```bash
81
+ $ ./vendor/bin/phpunit tests/SampleTest
82
+ ```