Behat 可以与 PHPUnit 集成吗?

问题描述 投票:0回答:1

我建立 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

testing phpunit integration bdd behat
1个回答
0
投票

“集成”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
beforeScenario
and
afterScenario`钩子...并且还有更多用于更多控制

阅读文档,因为行为提供了很多...例如转换自动将功能文件中的文本变量转换为对象。

© www.soinside.com 2019 - 2024. All rights reserved.