我有一个模块A,如下所示:
import unittest2
def check_function():
# performs actions and returns True or False
return smth
CHECK = check_function()
class A(unittest2.TestCase):
@unittest2.skipIf(CHECK, "skip message 1")
def test_1(self):
# test check
@unittest2.skipIf(CHECK, "skip message 2")
def test_2(self):
# test check
模块A由另一个模块导入,称为B. 何时全局变量CHECK初始化?在进口?在课堂实例化?
每次调用A类时,我都需要设置CHECK变量。我怎样才能做到这一点?
编辑: 我尝试了以下(可能是我正在寻找的),但是在setUpClass中没有设置CHECK(无论check_function()返回什么,它都保持False。)
import unittest2
def check_function():
# performs actions and returns True or False
return smth
CHECK = False
class A(unittest2.TestCase):
global CHECK
@classmethod
def setUpClass(cls):
CHECK = check_function()
@unittest2.skipIf(CHECK, "skip message 1")
def test_1(self):
# test check
@unittest2.skipIf(CHECK, "skip message 2")
def test_2(self):
# test check
每次调用测试时,如何设置CHECK一次的想法?
编辑: check_function()肯定被调用一次,但我不明白为什么unittest2.skipIf没有“看到”setUpClass中设置的值,并坚持声明时设置的False值?
解决方案:
代码的最终骨架看起来像这样:
import unittest2
def check_function():
# performs checks and returns True or False
return smth
class A(unittest2.TestCase):
CHECK = check_function()
@unittest2.skipIf(CHECK, "skip message 1")
def test_1(self):
# do tests
self.assertTrue(True)
@unittest2.skipIf(CHECK, "skip message 1")
def test_2(self):
# do tests
self.assertTrue(True)
答案 0 :(得分:2)
第一次模块导入时,CHECK
变量已初始化。
参见示例。我有模块mymodule.py
,其中包含:
print "i am mymodule"
还有一些anothermodule.py
:
print "first"
import mymodule
print "second"
import mymodule
print "third"
当我运行another module.py
时,我得到:
first
i am mymodule
second
third
python中的邀请变量与print
和mymodule.py
的命令相同
将在翻译时逐行执行,这将是您模块中的第一次。
更明确的例子。
def get_a():
print 'init a'
return 42
def get_b():
print 'init b'
return 20
a = get_a()
b = get_b()
:
anothermodule.py
from mymodule import a
print "a =", a
print "b =", b
init a
init b
a = 42
Traceback (most recent call last):
File "anothermodule.py", line 3, in <module>
print b
NameError: name 'b' is not defined
结果:
{{1}}
答案 1 :(得分:1)
你的第二种方法看起来像一个起点。但是你遇到了计时问题。
一方面,您希望在应用装饰器时出现该值(非常早),另一方面,您在调用setUpClass()
时进行设置。那可能已经很晚了。
在我看来唯一的选择
class A(unittest2.TestCase):
CHECK = check_function()
@unittest2.skipIf(CHECK, "skip message 1")
def test_1(self):
# test check
@unittest2.skipIf(CHECK, "skip message 2")
def test_2(self):
# test check
其中CHECK
的初始化时间早于使用。
答案 2 :(得分:0)
这个怎么样:
import unittest2
def check_function():
# performs actions and returns True or False
return smth
CHECK = None
class A(unittest2.TestCase):
def __init__(self,*args,**kwargs):
CHECK=check_funtion
super(A,self).__init__(*args,**kwargs)
@unittest2.skipIf(CHECK, "skip message 1")
def test_1(self):
# test check
@unittest2.skipIf(CHECK, "skip message 2")
def test_2(self):
# test check