PHPUnit测试 - 无法断言实际大小11935与预期大小3匹配

时间:2018-02-23 14:31:38

标签: php testing phpunit tdd assertions

我是phpunit的新手并尝试编写一个断言创建了三个音符的测试,但我从数据库中获取了所有音符。

    /** @test */
    public function it_gets_notes()
    {
        $address = Address::first();
        $notes = factory(AddressNote::class, 3)->create(['address_id' 
        => $address->id]);
        $found = $this->notesClass->getData(['address_id' => $address-
        >id]);
        $this->assertCount(3, $found);
    }
}

Address和AddressNote模型正常运行。我想我对getData方法最为困惑,我知道我需要代码覆盖。有人看到我错过了会在标题中产生错误的内容吗?

2 个答案:

答案 0 :(得分:2)

如果您需要在运行create方法后检查差异,请在添加之前和之后保存$found,减法将是您的号码:

public function it_gets_notes()
{
    $address = Address::first();
    $found = $this->notesClass->getData(['address_id' => $address->id]);
    $notes = factory(AddressNote::class, 3)->create(['address_id' => $address->id]);
    $foundAfter = $this->notesClass->getData(['address_id' => $address->id]);
    $difference = count($foundAfter) - count($found);
    $this->assertEquals(3, $difference);
}

请注意,由于您要比较数字,因此现在需要使用assertEquals() 3和现在的差异而不是assertCount()

答案 1 :(得分:0)

我不知道您的整个故事,但我认为您的第一个错误是您没有创建测试数据库。
所以,这将是第一步 - 除了您的databaseName(无论名称)创建databaseName_test 还有一些其他步骤要做 - 在您的env文件中将databaseName的名称更改为databaseName_testing - 但仅在您进行测试时(然后立即回滚到原始databaseName)。
然而,问题仍然存在(PHP单元不是一个完美的工具,就像PHP一样),这就是可以提供帮助的黑客。
而不是:

    $this->assertEquals(3, $difference);

写:

    $this->assertEquals(11935, $difference); //the number is specific for your case

是的,这很愚蠢,但应该有用......