gpt4 book ai didi

python - 如何使用 py.test skipif 检查成员变量?

转载 作者:行者123 更新时间:2023-11-28 20:22:43 26 4
gpt4 key购买 nike

在 TestCase 的 setUp 函数中,我将成员变量 is_type 设置为 True 或 False。我在类里面有一些测试,如果值为 false,则不应运行这些测试。我不知道如何使用 skipif 功能执行此操作。

@py.test.mark.skipif( not ???.is_type )
def test_method(self):
...

self??? 不起作用,因为它还不在对象中。如何引用 is_type 变量?


更完整的例子:

class DBTest(unittest.TestCase):
def setUp(self):
self.is_dynamo = os.environ.get( 'TEST_DB', '' ) == 'Dynamo'

def test_account_ts(self):
if not self.is_dynamo:
return

...

如何将 if not self.is_dynamo 转换为 py.test skipif 条件?

最佳答案

正如您提到的,您不能在 skipif 标记中引用实例,因为该实例尚不存在。

我会保持简单并做类似的事情:

@pytest.mark.skipif(os.environ.get('TEST_DB') != 'Dynamo')
def test_dynamo():
db = MyDatabaseWithDynamo(is_dynamo=True)
# Some assertion or other.

你也可以在类上使用 @pytest.mark.skipif

documentation关于这个特性有一些很好的例子。其中许多与检查环境的某些部分以决定应跳过哪些测试有关。这听起来与您的用例非常相似,所以我想说您的公司很好。

但是,如您在下面的评论中所说,如果您想避免使用全局变量,则可以从任意位置引发 pytest.skip 异常。下面我在一个 fixture 中进行,我认为这可以使测试设置与测试用例很好地分开。参见 the documentation更多的可能性。

这是我的测试文件:

import os
import pytest

class MyDatabaseWithDynamo(object):
def __init__(self, is_dynamo):
pass

@pytest.fixture
def database():
is_dynamo = os.environ.get('TEST_DB') == 'Dynamo'
if not is_dynamo:
raise pytest.skip()
return MyDatabaseWithDynamo(is_dynamo=True)

def test_db(database):
pass

这是测试输出:

$ py.test test_foo.py
======================================= test session starts =======================================
platform darwin -- Python 2.7.5 -- py-1.4.20 -- pytest-2.5.2
collected 1 items

test_foo.py s

==================================== 1 skipped in 0.01 seconds ===================================

关于python - 如何使用 py.test skipif 检查成员变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22603562/

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