【问题标题】:Phpunit tests gives warning no tests found in classPhpunit 测试给出警告,在课堂上找不到任何测试
【发布时间】:2015-02-20 08:10:18
【问题描述】:

我正在尝试学习如何使用 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 设置或其他任何东西。任何帮助表示赞赏。

谢谢。

【问题讨论】:

  • 我已经阅读了 laravel 中的手册。我正在关注 laracasts 中的教程。我是否缺少任何其他手册?
  • 我现在明白了。在 tut 视频中,我看到函数名称是这样使用的,并且它正在工作。我没有猜到函数名称应该是“testItFetchesPosts”。我以为这只是一个示例名称。

标签: php laravel phpunit


【解决方案1】:

Annotations are the answer.

/** @test */
public function it_tests_something()
{
  ...
}

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

【讨论】:

    【解决方案2】:

    PHPUnit 将识别为测试的唯一方法是名称为 starting with test 的方法。

    因此您应该将it_fetches_posts() 方法重命名为test_it_fetches_posts 或testItFetchesPosts。驼峰式命名是可选的,但如果您稍后使用 --testdox 选项会很有用。

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

    【讨论】:

    • 感谢您的回答。我开始得到结果。我猜教程已经过时了。
    • 这个答案不正确,作为注释/** @test */ 指示phpunit 将任何指示的方法视为测试
    • 另外,请确保您的测试方法是公开的,phpunit 不会识别私有方法。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      此外,考虑一个案例,您正在测试一个需要一个类 B 的类 A(您将模拟该类)。当调用$a->someMethod($mocked_B_class) 时,请确保其中没有任何警告,例如尝试访问数组的属性,就像访问类($array = ['one','two']; $array->one) 的属性一样。

      在这种情况下,它不会为您提供有关测试或错误的任何信息

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-04-01
        • 2017-09-29
        • 2019-07-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多