3 つのファイルがあります。1 つはテストを含み、1 つはデータを含み、もう 1 つはテストを実行するための指示を含みます。
base.py
#!/usr/bin/env python
class Base(object):
def __init__(self):
pass
def is_true(self):
return True
datadrv.py
def pytest_generate_tests(metafunc):
"""
Parse the data provided in scenarios.
"""
idlist = []
argvalues = []
for scenario in metafunc.cls.scenarios:
idlist.append(scenario[0])
items = scenario[1].items()
argnames = [x[0] for x in items]
argvalues.append(([x[1] for x in items]))
metafunc.parametrize(argnames, argvalues, ids=idlist)
###
# EDIT BELOW
# ADD NEW SCENARIOS
###
scenario1 = ('ACME_Manage_Keys', { 'org': 'ACME_Corporation',
'perm_name': 'ManageAcmeCorp',
'resource': 'activation_keys',
'verbs': ('manage_all',),
'allowed': {"test1": is_true}})
test_execute.py
#!/usr/bin/env python
from lib.base import Base
import pytest
from unittestzero import Assert
from data.datadrv import *
class TestDictionarySupport(object):
scenarios = [scenario1]
def test_datadriven_support(self,
org,
perm_name,
resource,
verbs,
allowed):
base = Base()
functionToCall = allowed['test1']
Assert.true(base.functionToCall())
""" THIS WORKS, uncomment the block to see """
"""
Assert.true(base.is_true())
"""
私の最終目標は、Assert.true(base.is_true())
私が行ったすべての試みが TypeErrors または NameErrors になることです。ここで何が欠けているか、間違っていますか?
上記を再現するには、3 つのディレクトリを作成するだけです。ライブラリ、データ、およびテスト。test_execute.py を tests に、datadrv.py を data に、base.py を lib に配置します。実行するには、pytest と unittestzero が必要です。ルート ディレクトリから py.test を実行できます。
注:これだけの作業を行うと、forループと複数のテストが作成されるため、次のfunctionToCall = allowed['test1']
ようになりますfunctionToCall = key[value]
また、私の出発点はhttp://code.activestate.com/recipes/65126-dictionary-of-methodsfunctions/です。
ありがとうございます。エラーは次のとおりです。
エラーは、試みたアプローチによって異なることに注意してください。
with 'allowed': {'test1': Base.is_true}})
:
_ __ _ __ _ __ __ _ __ _ _ __ _ ___ tests /test_execute.py 収集エラー_ __ _ _ __ _ _ __ _ _ __ _ ___ tests / test_execute.py : 6
: in
from data.datadrv import * data/datadrv.py:22: in 'allowed': {'test1': Base.is_true}}) E NameError: name 'Base' is not defined ========== ========================================= 0.02秒で1エラー=== ==================================================
: tests/ test_execute.py 'allowed': {'test1': base.is_true}})
:6: で
from data.datadrv import * data/datadrv.py:22: in 'allowed': {'test1': base.is_true}}) E NameError: 名前 'base' が定義されていません
とAssert.true(base.functionToCall())
:
tests/test_execute.py:6: で
from data.datadrv import * data/datadrv.py:22: in 'allowed': {'test1': is_true}}) E NameError: name 'is_true' is not defined