Phpunit测试发出警告没有在课堂上发现的测试

yts*_*jam 43 php phpunit laravel

我正在尝试学习如何使用phpunit和laravel进行测试.使用phpunit命令启动测试时,我收到警告:

There was 1 failure:

1) Warning
No tests found in class "PostsTest".

FAILURES!                            
Tests: 2, Assertions: 1, Failures: 
Run Code Online (Sandbox Code Playgroud)

我的测试类名和文件名匹配.我已经阅读了有关不匹配名称的其他问题.我的文件名是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);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有必要,我的ApiTester:

use Faker\Factory as Faker;

class ApiTester extends TestCase {
    protected $fake;
    protected $times = 1;
    function __construct($faker)
    {
        $this->fake = Faker::create();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道错误在哪里.Laravel或我当地的phpunit设置或其他任何东西.任何帮助表示赞赏.

谢谢.

gon*_*lez 91

PHPUnit将识别为测试的唯一方法是名称test开头的方法.

所以你应该将it_fetches_posts()方法重命名为test_it_fetches_poststestItFetchesPosts.驼峰案例命名是可选的,但如果稍后使用--testdox选项则很有用.

此外,如其他答案中所述,您还可以将@test注释添加到任何方法,它将被视为PHPUnit的测试.

  • 这个答案是不正确的,因为注释`/**@test*/'指示phpunit将任何指示的方法视为测试 (18认同)

CJ *_*son 83

注释是答案.

/** @test */
public function it_tests_something()
{
  ...
}
Run Code Online (Sandbox Code Playgroud)

添加它@test告诉phpunit将该函数视为测试,无论名称如何.


Yam*_*raf 13

要么以“test”一词开头,要么test_something_should_work使用此注释更新测试文档/** @test */