使用Codeception,Symfony2 Functional测试服务如何添加断言?

时间:2013-05-20 21:35:23

标签: symfony phpunit codeception

总结:我想在我的测试中使用Module断言。

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

我使用以下services.suite.yml

创建了一个新套件
class_name: ServiceGuy
  modules:
    enabled: [Symfony2, Doctrine2, Filesystem, ServiceHelper]

我运行build并生成: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(“奥克兰”);

$这 - >的assertEquals(1,计数($站));    $这 - >的assertEquals( '奥克兰',$站 - > getDisplayName());

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

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

我试过把\ PHPUnit_Framework_Assert :: assertEquals(1,count($ stations)); 在测试中 - 但这会导致测试工具无法处理的故障异常。

谢谢Andrew

PS我会标记这个'代码',但我还没有得分。也许其他人可以。

1 个答案:

答案 0 :(得分:2)

是的。我们因为过多的滥用而弃用它。

在您的情况下,您应该使用经典的PHPUnit测试样式。 Codeception有2个选项,生成:test - 获取一些Codeception帮助器或生成:phpunit以获得普通的PHPUnit测试而没有魔法。

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

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