Unit testing PHPUnit测试显示失败,即使一切正常

Unit testing PHPUnit测试显示失败,即使一切正常,unit-testing,phpunit,Unit Testing,Phpunit,我有一个控制器,用于向数据库中添加语言。在控制器的测试类的前面,添加新语言的测试会添加一种称为“测试语言”的新语言。我还测试了编辑操作,代码如下: public function testCanEditLanguageAction() { $language = $this->em->getRepository('\Entities\Languages') ->findOneByEnglishName($this->test

我有一个控制器,用于向数据库中添加语言。在控制器的测试类的前面,添加新语言的测试会添加一种称为“测试语言”的新语言。我还测试了编辑操作,代码如下:

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());
}
该测试在大部分情况下运行良好:它正确地获取语言,编辑它,并将值从“test language”更新为“Esttay Anguagelay”。如果我在测试完成后查看数据库,测试语言甚至具有该值

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

There was 1 failure:

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

换言之,它认为朗格的价值没有改变,而它显然已经改变了。(就像我说的,检查数据库的值可以确认它实际上已经改变了)。我是不是遗漏了什么?我对PHPUnit很陌生,所以可能有一些事情我忘记了做或者我做错了。

当字符串不相等时,$this->assertEquals()将抛出一个错误。如果你不熟悉的话,这是一种相反的逻辑。因此,您可能需要测试更改后的语言是否与assertEquals匹配。

是否进行了任何类型的缓存?您的问题可能出现在
$editedLanguage->getEnglishName()
中,而不是代码中的任何内容。你能直接从数据库中检索数据,而不是依靠那个函数来获取数据吗?我尝试使用一个简单的条令查询,但得到了相同的结果。无论如何,第一次——当我使用这个对象时,我从数据库中得到了一个新的。它似乎认为旧值仍然存在,即使它被刷新到数据库中。有没有任何方法可以输出当前值而不实际尝试断言任何内容?以下是我尝试的方法:
$query=$this->em->createQuery('SELECT t.englishName FROM\Entities\psntyps t其中t.id=:id')->setParameter('id',$id))我通过$this->assertEquals()运行了该查询的结果,但结果是相同的。我应该关闭缓存吗?如果是,我该怎么做?