即使一切都很好,PHPUnit测试也显示失败

时间:2013-07-06 08:34:39

标签: unit-testing phpunit

我有一个控制器,用于向我的数据库添加语言。在控制器测试类的早期,添加新语言的测试添加了一种名为“测试语言”的新语言。我还对编辑操作进行了测试,使用以下代码:

public function testCanEditLanguageAction()
    {
        $language = $this->em->getRepository('\Entities\Languages')
            ->findOneByEnglishName($this->testLanguage);
        $languageId = $language->getId();
        unset($language);

        $replacementName = 'Esttay Anguagelay';

        // get the form in order to get the hash
        $form = new Application_Model_FormLanguage([
            'action' => '/langauges/edit',
            'id' => $languageId
        ]);

        $this->dispatch("/languages/edit/$languageId");
        $form->render();

        $this->request
            ->setMethod('POST')
            ->setPost([
                'id' => $languageId,
                'englishName' => $replacementName,
                'japaneseName' => '仮の言葉',
                'kanaName' => 'カリノコトバ',
                'languageHash' => $form->languageHash->getValue()
            ]);

        $this->dispatch("/languages/edit");

        $this->assertRedirectTo('/');

        // make sure the data got edited properly
        $editedLanguage = $this->em
            ->getRepository('\Entities\Languages')
            ->findOneById($languageId);

        $this->assertEquals($replacementName, $editedLanguage->getEnglishName());
}

测试大部分工作正常:它正确获取语言,编辑它,并将值从“测试语言”更新为“Esttay Anguagelay”。如果我在测试完成后查看数据库,测试语言甚至会有这个值。

问题是,根据PHPUnit,测试失败了。我得到以下输出:

There was 1 failure:

1) LanguagesControllerTest::testCanEditLanguageAction
Failed asserting that two strings are equal.
--- Expected
+++ Actual
@@ @@
-Esttay Anguagelay
+Test Language

换句话说,它认为语言的价值没有改变,当它显然有。 (就像我说的,检查数据库的值确认它实际上已经改变了)。我在这里错过了什么吗?我对PHPUnit很新,所以我可能会忘记做错或做错了。

1 个答案:

答案 0 :(得分:0)

当字符串不相等时,$ this-> assertEquals()将抛出错误。如果你不熟悉它,它就是一种颠倒的逻辑。因此,您可能希望测试更改的语言是否与assertEquals匹配。

相关问题