【问题标题】:Doctrine 2 - Functional Testing原则 2 - 功能测试
【发布时间】:2012-06-30 22:28:54
【问题描述】:

好的,情况就是这样。我使用 Doctrine 2 和 PHPUnit。 我有一个产品列表,每个产品都有一个类别。我想测试 findByCategory() 方法,它显然应该返回特定类别的产品列表。

很简单,但我不确定如何正确测试它。在网络上的某些地方,我只看到简单的示例,例如:

$this->assertEquals(4, count($foundProducts));

所以它只是测试返回结果的数量,而不是实际数据。 我也试过这个:

   foreach($allFoundProducts as $i=>$foundProduct) {
        $this->assertEquals($products[$i], $foundProduct);
    }

其中 $products 是我在搜索之前保留的实体列表。 但是需要很长时间才能完成,有时甚至会崩溃(内存不足)。

请告诉我你用来进行这样的数据库测试的方法。

非常感谢!

【问题讨论】:

  • 您的意思是通过simple conditions查询吗?
  • 我的意思是用 phpunit 进行功能测试。如何对存储库方法进行更舒适的测试。那可能是快捷方法或自定义,没关系。
  • 如您所见,将从 DB 返回的值与预期字符串数组进行比较是显而易见的方法。我认为您需要扩展您的问题以解释为什么这不好。为什么“需要很多时间才能完成”?如果它有时会崩溃,错误信息是什么?是 phpUnit 还是 Doctrine 崩溃了?
  • 好的,基本上我希望在回复中看到的是人们如何针对教条实体进行测试的示例。这些是对象,所以不是直接的字符串比较。
  • 我现在这样做: $this->assertEquals('titleOne', $foundEntity->getTitle()) $this->assertEquals('some description', $foundEntity->getDescription ()) .... 等等 但是如果实体中有很多字段(还有依赖的),这可能是一个漫长的过程。

标签: testing doctrine-orm phpunit


【解决方案1】:

我会测试返回结果的数量(就像在你的第一个示例中一样),然后运行结果并测试它们的类型:

$this->assertEquals(4, count($foundProducts));

foreach($foundProducts as $product) {
    $this->assertInstanceOf('MyProductEntity', $product);
}

【讨论】:

    【解决方案2】:

    试试这个:

    $products = $em->getRepository('MyProject\Domain\Product')->findBy(array('category' => $category));
    

    或者这个:

    $products = $em->getRepository('MyProject\Domain\Product')->findByCategory($category);
    

    【讨论】:

    • 这跟我的问题有什么关系?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多