- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在使用 Behave(Python 的 BDD)并且一直在挖掘源代码以了解 @given
、@when
和 @then
正在声明装饰器。
我走得最远的地方是查看 step_registry.py
,我在其中找到了函数 setup_step_decorators(context=None, registry=registry)
,它似乎正在执行这份工作。
但是,我不太明白这些装饰器是如何创建的,因为它们似乎没有在源代码中以 def when(...) 的形式显式声明:
.我的印象是它们是根据字符串列表声明的(for step_type in ('given', 'when', 'then', 'step'):
)然后由调用 make_decorator()
。
谁能带我看一下代码并解释这些装饰器在哪里/如何声明?
在这里您可以访问 source code of Behave .
最佳答案
好吧,让我们从外面开始:
if context is None:
context = globals()
for step_type in ('given', 'when', 'then', 'step'):
step_decorator = registry.make_decorator(step_type)
context[step_type.title()] = context[step_type] = step_decorator
我认为是最后一行让您感到困惑。
每个模块的全局命名空间只是一个字典。函数 globals()
返回该字典。如果修改该字典,则会创建新的模块全局变量。例如:
>>> globals()['a'] = 2
>>> a
2
在这种情况下,默认情况下,context = globals()
。因此,比方说,对于第一个 step_type
,您实际上是在这样做:
>>> globals()['given'] = step_decorator
关于python - Behave 的装饰器是如何创建/声明的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25213417/
我有一个行为场景大纲,我需要在其中使用竖线字符 - | 作为示例表中的单元格值。但我不知道如何转义这个字符而不被视为列分隔符。当我尝试使用 \| 序列时,出现了 Malformed table 错误。
这个示例代码有效(我可以在文件中写一些东西): from multiprocessing import Process, Queue queue = Queue() def _printer(self
我开始使用 Python Behave,因为我想做一个 API 测试。 目前我偶然发现了一些甚至可能无效的东西,但问题是:我可以在功能之间共享数据吗?我可以将一些存储在数据库或文件中,但也许有一些“内
我正在尝试使用 Cucumber (Behave) 编写测试。 'given' 语句需要能够带一个可选参数,它用于验证字符串中的内容。 这两种情况的示例功能语法是: Given Verify text
我正在尝试使用 Cucumber (Behave) 编写测试。 'given' 语句需要能够带一个可选参数,它用于验证字符串中的内容。 这两种情况的示例功能语法是: Given Verify text
我有以下测试场景: 检查是否已创建具有特定名称的项目 编辑此项目 验证是否已编辑 作为拆卸过程的一部分删除此项目 下面是实现此目的的示例代码:场景: @fixture.remove_edited_
我们正在使用 Behave BDD 工具来实现 API 的自动化。是否有任何工具可以使用我们的行为案例提供代码覆盖率? 我们尝试使用覆盖模块,它不适用于 Behave。 最佳答案 您可以运行任何具有覆
如何在行为 .feature 文件中将列表或字典之类的对象作为参数传递,以便我可以在我的 python 函数步骤中使用该参数?请参阅下面我试图实现的示例: Feature: Scenario: Giv
我创建了一个自定义错误处理程序来处理失败时的屏幕截图 #error_handler.py def screenshot_handler(func): def func_wrapper(self
我有多个示例的场景大纲,如下所示: Examples: | country | type | number | | Poland | A
body { background: url(http://i.imgur.com/LMYkPk3.jpg) no-repeat center center fixed; backgr
我正在尝试实现一个简单的图像轮播,但我无法阻止图像下降到下一行。这是我的 CSS: #gallery-wrap{margin: 0 auto; overflow: hidden; width: 532
我有一个状态标签,它根据以下内容显示带有彩色边框的消息当前状态。消息本身可能会有所不同(即可以有多个消息到 ERROR),但 CLEAR 状态不同,因为它永远不应该显示任何消息。 使用示例 setSt
我目前正在使用 Behave(Python 的 BDD)并且一直在挖掘源代码以了解 @given、@when 和 @then 正在声明装饰器。 我走得最远的地方是查看 step_registry.py
我有一系列 PHPUnit 测试来验证类“A 类”。 我有另一个类,“B 类”,它扩展了 A 类。 有没有一种好的方法可以在不复制测试代码的情况下测试“B 类通过了 A 类的测试”,或者换句话说“B
如标题所示,我希望在场景大纲之前运行一些特定的配置/环境设置步骤。我知道有 Background 可以针对场景执行此操作,但 Behave 将场景大纲拆分为多个场景,从而为场景大纲中的每个输入运行后台
考虑一个 Behave 场景: When some magic number is generated Then the number should be greater than 5 所以我有一个生
有没有办法告诉 behave 在步骤实现中跳过当前步骤? 类似于: @given("bla bla bla") def step(): skip_current_step() 用例是我想检查是
我正在使用 python-behave 进行 BDD 测试,我必须从命令行传递一个 URL(例如 www.abc.com)。 $behave -u "www.abc.com" 为此,我已阅读 beha
有人可以告诉我如何使用 Python 在 Behave 中再次运行失败的测试吗? 如果失败,我想自动重新运行失败的测试用例。 最佳答案 行为库实际上有一个 RerunFormatter这可以帮助您重新
我是一名优秀的程序员,十分优秀!