我正在使用nose运行测试,并希望使用另一个测试项中的变量。为此,我在设置类时创建变量。在我看来,变量是为每个项目复制的,因此该类中的变量实际上保持不变。如果我使用列表代替简单变量,我会看到我期待的行为。
我写了一个小例子,我们可以观察到var1
和varg
在输入测试时总是显示相同的值:
import time
import sys
import logging
logger = logging.getLogger('008')
class Test008:
varg = None
@classmethod
def setup_class(cls):
logger.info('* setup class')
cls.var1 = None
cls.list1 = []
def setup(self):
logger.info('\r\n* setup')
logger.info('\t var1: {}, varg: {}, list: {}'.format(
self.var1, self.varg, self.list1))
def teardown(self):
logger.info('* teardown')
logger.info('\t var1: {}, varg: {}, list: {}'.format(
self.var1, self.varg, self.list1))
def test_000(self):
self.var1 = 0
self.varg = 0
self.list1.append(0)
pass
def test_001(self):
# Here I would like to access the variables but they still show 'None'
self.var1 = 1
self.varg = 1
self.list1.append(1)
pass
@classmethod
def teardown_class(self):
logger.info('* teardown class')
结果:
nose.config: INFO: Ignoring files matching ['^\\.', '^_', '^setup\\.py$']
* setup class
008_TestVars.Test008.test_000 ...
* setup
var1: None, varg: None, list: []
* teardown
var1: 0, varg: 0, list: [0]
ok
008_TestVars.Test008.test_001 ...
* setup
var1: None, varg: None, list: [0]
* teardown
var1: 1, varg: 1, list: [0, 1]
ok
* teardown class
----------------------------------------------------------------------
有没有办法让var1
和varg
的值从一个测试继续进行到另一个测试?
答案 0 :(得分:1)
docs明确说出
构造一个测试用例,用一个新的实例运行每个方法 测试类
如果您需要实际时间为您正在测试的函数设置参数,为什么不编写一个设置状态的测试,调用您的函数一次并断言传递然后再次调用它并断言如果失败?
def test_that_two_calls_to_my_method_with_same_params_fails(self):
var1 = 1
varg = 1
assert myMethod(var1, varg)
assert myMethod(var1, varg) == False
我认为这更清楚,因为一个测试将所有状态组合在一起,并且可以按任何顺序运行测试。
你可以说它确实如此,因为你试图使用安装方法。文档也说
测试模块是一个匹配testMatch常规的python模块 表达。测试模块提供模块级设置和拆卸;限定 用于设置的方法设置,setup_module,setUp或setUpModule, 用于拆卸的拆卸,拆卸模块或者tearDownModule。
所以,在课外有一个
def setup_module()
#bother now I need to use global variables
pass