我一直在使用类似Behat英语的测试语言(Gherkin?)编写测试脚本,但很快就遇到了它的重大限制。
如果我可以在我设置的phpunit测试脚本中用PHP执行这些测试,那么我可以大大扩展我可以添加的测试。 (我使用的是FuelPHP)。
我一直在修补几个小时试图让Behat在PHPUNIT测试脚本中执行,但运气不好。
这可能吗?
答案 0 :(得分:2)
我认为你在混淆某些东西,因为你所说的并没有多大意义。如果您很难用代码表达逻辑,那么您应该就此提出具体问题。
Behat和Mink都是用PHP编写的,你用PHP编写上下文,有一些插件可以让生活更轻松(也用php编写)。事实上,当你运行它们时,所有的测试都是用PHP执行的......是的!
如果你想比较两个页面的数据,你可以简单地创建一个这样的步骤:
/**
* @Then /^the page "(.+)" and the page "(.+)" content should somehow compare$/
*/
public function assertPageContentCompares($page1, $page2)
{
$session = $this->getSession();
$session->visit($page1);
$page1contents = $session->getPage()->getHtml();
$session->visit($page2);
$page2contents = $session->getPage()->getHtml();
// Compare stuff…
}
除了显而易见之外,您可以在Behat / Mink中使用PHPUnit来进行断言,即在步骤定义中。大多数(并非所有)PHPUnit断言都是静态方法,使用它们就像这样简单:
PHPUnit_Framework_TestCase::assertSame("", "");
你可以使用Selenium(可能还有其他框架)和PHPUnit,如果这更多是关于单元测试而不是功能测试,the official documentation tells how。
如果你只是讨厌Gherkin,那么你对Behat的关注并不多 - 它就是它的核心。有了PhpStorm 8,它有很好的支持,您可以轻松浏览代码并快速重构。如果这没有削减它,那么Behat的另一个很好的替代品叫Codeception,你可以使用纯PHP来定义你的测试。也许这就是你要找的东西。
答案 1 :(得分:0)
是的。您可以使用我创建的库:jonathanjfshaw/phpunitbehat。
您的phpunit测试将如下所示:
namespace MyProject\Tests;
use PHPUnit\Framework\TestCase;
use PHPUnitBehat\TestTraits\BehatTestTrait;
class MyTestBase extends TestCase {
use BehatTestTrait;
}
namespace MyProject\Tests;
class MyTest extends MyTestBase {
protected $feature = <<<'FEATURE'
Feature: Demo feature
In order to demonstrate testing a feature in phpUnit
We define a simple feature in the class
Scenario: Success
Given a step that succeeds
Scenario: Failure
When a step fails
Scenario: Undefined
Then there is a step that is undefined
FEATURE;
/**
* @Given a step that succeeds
*/
public function aStepThatSucceeds() {
$this->assertTrue(true);
}
/**
* @When a step fails
*/
public function aStepFails() {
$this->assertTrue(false);
}
}
我写了a blog post explaining why I think this is not a bad idea。