我有三个文件;一个包含测试,一个包含数据,另一个包含运行测试的说明。试图传递一个函数字典在Python中使用单独的文件数据时失败
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,数据放置datadrv.py,放置base.py。你需要pytest和unittestzero来运行。从根目录可以运行py.test。
注:当我有这么多的工作,我将有一个for循环和多次测试,以便functionToCall = allowed['test1']
将成为像functionToCall = key[value]
而且,我的出发参考点是http://code.activestate.com/recipes/65126-dictionary-of-methodsfunctions/。
谢谢你,错误如下:
注意错误的做法不同尝试。
'allowed': {'test1': Base.is_true}})
随着: _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ___ ERROR收集测试/ test_execute.py _ __ _ __ _ __ _ __ _ __ _ __ _ __ _ ___ 测试/ test_execute.py:6:
from data.datadrv import * data/datadrv.py:22: in 'allowed': {'test1': Base.is_true}}) E NameError: name 'Base' is not defined ==================================================== 1 error in 0.02 seconds =====================================================
随着'allowed': {'test1': base.is_true}})
: 测试/ test_execute.py: 6:
from data.datadrv import * data/datadrv.py:22: in 'allowed': {'test1': base.is_true}}) E NameError: name 'base' is not defined
随着Assert.true(base.functionToCall())
:
tests/test_execute。吡啶:6:
from data.datadrv import * data/datadrv.py:22: in 'allowed': {'test1': is_true}}) E NameError: name 'is_true' is not defined
凡'Assert'定义? – rubik
发布您的错误消息和回溯 –
更新与适当的导入。 – Eric