python nose`ValueError:在<;类别';我的测试。检查错误测试'>;:运行测试`
我有一个用鼻子运行的工作测试套件 我最近意识到我需要在我的整体python nose`ValueError:在<;类别';我的测试。检查错误测试'>;:运行测试`,python,nose,nosetests,python-unittest,Python,Nose,Nosetests,Python Unittest,我有一个用鼻子运行的工作测试套件 我最近意识到我需要在我的整体设置()中添加一些东西,这是由每个单独测试中发现的变量触发的(该变量由我们的版本控制系统更新) 我已经在我的BaseTest.py和我的个人测试中添加了一个\uuuu init\uuu()。但是,我得到ValueError:runTest中没有这样的测试方法 从谷歌上看,这似乎与unittest加载程序有关。但是Nose以前总是照顾所有的装载机 我猜这与我在Nose设置后触摸methodName属性有关,但我不知道应该将其设置为什么,
设置()中添加一些东西,这是由每个单独测试中发现的变量触发的(该变量由我们的版本控制系统更新)
我已经在我的BaseTest.py和我的个人测试中添加了一个\uuuu init\uuu()
。但是,我得到ValueError:runTest中没有这样的测试方法
从谷歌上看,这似乎与unittest加载程序有关。但是Nose以前总是照顾所有的装载机
我猜这与我在Nose设置后触摸methodName
属性有关,但我不知道应该将其设置为什么,特别是因为我使用了各种Nose插件。或许有更好的办法。我需要做什么不同的事情
BaseTest.py
import unittest
class BaseTest(unittest.TestCase):
def __init__(self, methodName='runTest', p4rev=None):
super(BaseTest, self).__init__(methodName)
self.p4rev = p4rev
def setUp(self):
triggerSomething(p4rev)
My_test.py
from BaseTest import BaseTest
rev = '12345'
class CheckError_Test(BaseTest):
def __init__(self, rev):
super(CheckError_Test, self).__init__(p4rev=rev)
dosomething()
注意:如果我没有使用super(BaseTest,self)。\uuu init\uuuu(methodName)
我会得到一个错误:属性错误:“check\u error\u test”对象没有属性“\u testMethodName”
。因此将其包括在内
澄清:一条评论建议重复帖子,但链接帖子一般是关于如何运行测试的,这篇文章询问如何在运行时访问给定测试中的特定变量。您可以将BaseTest
设置为一个抽象类,它要求派生类的实例设置self.p4rev
class BaseTest(unittest.TestCase):
# Note: subclasses must provide the p4rev attribute
def setUp(self):
triggerSomething(self.p4rev)
然后在测试脚本中
from BaseTest import BaseTest
rev = '12345'
class CheckError_Test(BaseTest):
def setUp(self):
self.p4rev = rev
BaseTest.setUp(self) # Or use super() if you like
您可以选择使用ABCMeta
类更清楚地将BaseTest
标记为抽象类,并将p4rev
定义为抽象属性
我很确定有一些方法可以让nose
使用客户TestLoader
来实例化您的测试,但在我看来,这似乎是一个更简单的替代方法。我只会使用内置来传递信息:
在my_test.py中:
from base_test import BaseTest
from nose.plugins.attrib import attr
rev = '12345'
@attr(rev=rev)
class CheckError_Test(BaseTest):
def test_me(self):
assert self.rev == rev
在base_test.py中:
import unittest
def triggerSomething(text):
print "revision was set to", text
class BaseTest(unittest.TestCase):
def setUp(self):
p4rev = getattr(self, 'rev')
triggerSomething(p4rev)
外壳输出:
$nosets my_test.py--pdb-s
如果My_test.py
中存在rev
,为什么不能将其作为全局变量访问,而不是尝试将其嵌入到测试类中?这似乎会导致循环依赖Bast\u Test
类需要my\u Test.rev
进行setUp()
。但是my_test
需要Bast_test.setUp()
才能运行…可能重复的
revision was set to 12345
.
----------------------------------------------------------------------
Ran 1 test in 0.002s
OK