【问题标题】:pytest fixture yield generator (Get infinite set of predictable values)pytest 夹具产量生成器(获取无限的可预测值集)
【发布时间】:2022-11-10 05:30:18
【问题描述】:

我想用created_at 字段(datetime 类型)测试一个表。
(我正在对代码中的这个字段进行排序)。
为此,我想创建一些可预测的datetime 值的无限集(生成器)。
“无限”是因为我不会在每次更改表记录数(或任何其他具有created_at 字段的表)时都修改一个集合。

所以我做了2个固定装置:

@pytest.fixture(scope='session')
def frozen_datetime_gen(utc_now_):
    while True:
        next_datetime = utc_now_ + datetime.timedelta(days=365)
        yield next_datetime


@pytest.fixture(scope='session')
def utc_now():
    yield datetime.datetime.utcnow()

但得到错误: fixture function has more than one 'yield':

我正在理解问题和错误,但不明白我应该怎么做才能解决它。
也许我选择了错误的策略,我应该放弃可预测的日期时间集?

附言我是测试新手。

【问题讨论】:

    标签: pytest


    【解决方案1】:

    Pytest 固定装置已经是生成器。为了在 pytest.fixture 中使用 generator-within-generator,你需要在你的 fixture 中定义一个 generator 函数:

    @pytest.fixture(scope='session')
    def frozen_datetime_gen(utc_now_):
        def generator():
            while True:
                next_datetime = utc_now_ + datetime.timedelta(days=365)
                yield next_datetime
        return generator
    
    @pytest.fixture(scope='session')
    def utc_now():
        def generator():
            yield datetime.datetime.utcnow()
        return generator
    

    【讨论】:

      猜你喜欢
      • 2021-09-11
      • 1970-01-01
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-21
      • 2014-06-11
      • 2017-04-27
      相关资源
      最近更新 更多