我建立 Behat 是为了促进 BDD 作为我公司的测试框架。要求还将其与 PHPUnit 合并,以便获得该平台的优势,以及 Behat 场景的 Gherkin 语法的可读性。
我与 PHPUnit 集成的第一次尝试是从 Behat 功能文件中调用 php exec() 命令行,并将每个场景步骤的结果基于 PHPUnit 测试的反馈。然而,这感觉很麻烦,应该有一种方法可以更紧密地集成这些工具,希望允许 Behat 直接调用 PHPUnit 测试。
/**
* @When <invoice_custcode>
*/
public function invoiceCustcode()
{
$returnValue = "";
$output = "";
exec("phpunit BDDTest",$output,$returnValue);
echo "returned with status ".$returnValue." and output=".print_r($output);
}
到目前为止,我最接近的是 Jonathan Shaw 2019 年的这个项目,但它似乎并没有完全回答我的问题。
https://medium.com/@jonathanjfshaw/write-better-tests-by-using-behat-with-phpunit-ddb08d449b73
“集成”phpunit 的方法是使用它... behatcomposer.json 已经包含 php-unit... 如果您想使用嘲笑,只需包含它... 并将您的上下文写入支持您的领域语言功能:
/**
* @When I invoice code :invoice_code
*/
public function invoiceCustcode($invoice_code)
{
//make mock
$fakeDataRetriever = m::mock('My\Data\Api\Retriever');
$fakeDataRetriever->shouldReceive('getData')->andReturn(['fake_name' => fake_value']);
//test something with this mock
$return = (new Something($fakeDataRetriever))->someFunction();
//do an assert
$this->assertSame($return, 'expected return value');
}
然后有不同的钩子可以执行
setup
和拆卸functions, except they are called
beforeScenarioand
afterScenario`钩子...并且还有更多用于更多控制。