gpt4 book ai didi

behat - 是否可以在行为上下文中覆盖步骤定义?

转载 作者:行者123 更新时间:2023-12-04 03:28:48 26 4
gpt4 key购买 nike

是否可以让子上下文类扩展另一个子上下文并覆盖函数?

目前我有

class TestContext extends BehatContext {
/**
* @Given /^a testScenarioExists$/
*/
public function aTestscenarioexists() {
echo "I am a generic test scenario\n";
}
}


class SpecialTestContext extends TestContext {
/**
* @Given /^a testScenarioExists$/
*/
public function aTestscenarioexists() {
echo "I am a special test scenario\n";
}
}

在特征上下文中,我告诉我们 SpecialTestContext作为子上下文。

当我运行测试时,behat 提示

[Behat\Behat\Exception\RedundantException]
Step "/^a testScenarioExists$/" is already defined in SpecialTestContext::aTestscenarioexists()



有人可以指出我正确的方向吗?

为了进一步说明为什么我要实现这一点,我要实现的是能够在不同的环境中运行场景,并在小 cucumber 文件中指定环境,例如:
Scenario: Test with generic environment
Given I am in the environment "generic"
And a test scenario exists

Scenario: Test with specialised environment
Given I am in the environment "specialised"
And a test scenario exists

然后我可以使用在 FeatureContext 中添加一些代码加载正确的子上下文。

最佳答案

正如 Rob Squires 所提到的,动态上下文加载将不起作用。

但是我确实有一个覆盖步骤定义的解决方法,我经常使用它。不要注释你的方法。 Behat 将获取父类(super class)中被覆盖方法的注释,并将该方法名称映射到匹配步骤。当找到匹配的步骤时,将调用子类中的方法。为了清楚起见,我已经开始为此使用@override 批注。 @override 注释对 Behat 没有特殊意义。

class SpecialTestContext extends TestContext {
/**
* @override Given /^a testScenarioExists$/
*/
public function aTestscenarioexists() {
echo "I am a special test scenario\n";
}
}

关于behat - 是否可以在行为上下文中覆盖步骤定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15472556/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com