私はphpunitとlaravelでテストする方法を学ぼうとしています。 phpunit
コマンドを使用してテストを開始すると、警告が表示されます。
There was 1 failure:
1) Warning
No tests found in class "PostsTest".
FAILURES!
Tests: 2, Assertions: 1, Failures:
テストクラス名とファイル名が一致します。一致しない名前に関する他の問題を読みました。私のファイル名はPostsTest.php
と私のテストファイル:
class PostsTest extends ApiTester {
public function it_fetches_posts()
{
$this->times(5)->makePost();
$this->getJson('api/v1/posts');
$this->assertResponseOk();
}
private function makePost($postFields=[])
{
$post = array_merge([
'title' => $this->fake->sentence,
'content' => $this->fake->paragragraph
], $postFields);
while($this->times --)Post::create($post);
}
}
必要に応じて私のApiTester:
use Faker\Factory as Faker;
class ApiTester extends TestCase {
protected $fake;
protected $times = 1;
function __construct($faker)
{
$this->fake = Faker::create();
}
}
私はエラーがどこにあるかの手がかりを持っていません。 Laravelまたは私のローカルphpunit設定またはその他。どんな助けでも大歓迎です。
ありがとう。
注釈が答えです 。
/** @test */
public function it_tests_something()
{
...
}
@test
を追加すると、名前に関係なく、関数をテストとして扱うようphpunitに指示されます。
PHPUnitがテストとして認識する唯一のメソッドは、名前が test のメソッドです。
したがって、it_fetches_posts()
メソッドの名前をtest_it_fetches_posts
またはtestItFetchesPosts
に変更する必要があります。キャメルケースの命名はオプションですが、後で--testdoxオプションを使用する場合に便利です。
また、他の回答で述べたように、@test
アノテーションを任意のメソッドに追加することもできます。これは、PHPUnitによるテストと見なされます。
名前をtest_something_should_work
のようなWord 'test'で始めるか、この注釈/** @test */
でテストドキュメントを更新します。
さらに、クラスA
を必要とするクラスB
(モックする)をテストする場合を考えます。 $a->someMethod($mocked_B_class)
が呼び出されるとき、クラスのプロパティにアクセスするように配列のプロパティにアクセスしようとするなど、警告がないことを確認してください($array = ['one','two']; $array->one)
。
この場合、テストまたはエラーに関する情報は提供されません