1

摘要:我想在我的测试中使用模块断言。

以前我使用 PHPUnit 测试测试过 Symfony2 服务。这没关系,但我想使用 Codeception Symfony2 模块提供的一些设施以及更清洁的测试风格。

我使用以下 services.suite.yml 创建了一个新套件

class_name: ServiceGuy
  modules:
    enabled: [Symfony2, Doctrine2, Filesystem, ServiceHelper]

我运行了 build 和 generate:cest 并有一个 ServiceCest.php 测试文件

public function getServiceUrl(\ServiceGuy $I) {
    $this->myservice = $I->grabServiceFromContainer("myservice");
    $I->wantTo("get service URL");
    $I->seeTrue("http://example.com/services" 
                  ==  $this->ecservice->getServiceUrl());
}

这个测试通过了,因为我在我的 ServiceHelper.php 文件中添加了一个断言函数。

class ServiceHelper extends \Codeception\Module    {
  function seeTrue($flag) {
    $this->assertTrue($flag);
  }
}

Module 类有一组丰富的断言函数,我希望能够直接在我的测试中使用它们。但我不认为模块对象可用于测试。必须向 ServiceHelper 添加一系列断言函数似乎是重复的。有没有更好的办法?

例如在 phpunit 测试中我可能有这些断言。

$station = $ecservice->getStation("奥克兰");

$this->assertEquals(1,count($stations)); $this->assertEquals('Auckland',$station->getDisplayName());

我的问题是是否有办法在功能测试中包含所有这些断言,或者我是否必须将大量特定于测试的断言移动到帮助程序中。

Unit模块似乎提供了许多这些功能 - 但已被弃用。

我试着把 \PHPUnit_Framework_Assert::assertEquals(1,count($stations)); 在测试中 - 但这会引发测试工具未处理的失败异常。

谢谢安德鲁

PS我会标记这个'codeception',但我还没有要点。也许其他人可以。

4

1 回答 1

2

是的。由于误用太多,我们弃用了它。

在您的情况下,您应该使用经典的 PHPUnit 测试风格。Codeception 有 2 个选项,generate:test - 获取一些 Codeception 助手或 generate:phpunit 以获取普通的 PHPUnit 测试,没有任何魔法。

请阅读我的帖子。我有一些技巧,比如在单元测试中使用容器。

http://codeception.com/02-12-2013/testing-symfony2.html

于 2013-05-20T21:47:11.323 回答