I have a working test suite that runs with Nose.
I recently realized I needed to add things to my overall setUp()
, as triggered by a variable found in each individual test (the variable gets updated by our version control system).
I have added an __init__()
to my BaseTest.py and my individual test. However, I get ValueError: no such test method in <class 'my_test.check_error_test'>: runTest
From googling, it looks like this has to do with a unittest loader. But Nose always took care of all of the loaders before.
I'm guessing this has to do with the fact that I am touching the methodName
attribute after Nose sets it, but I cannot figure out what I should be setting it to, ESPECIALLY since I use various Nose Plugins. Or perhaps there's a better way. What do I need to do differently?
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()
NOTE: If I don't have use super(BaseTest, self).__init__(methodName)
I get an error: Attribute error: 'check_error_test' object has no attribute '_testMethodName'
. Hence its inclusion
To Clarify: One comment suggests duplicate post, however linked post is about how to run tests in general, while this post asks how to access specific variables within a given test at runtime.
I would just use built in attributes plugin to pass the information down:
in 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
in 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)
shell output:
$ nosetests my_test.py --pdb -s
revision was set to 12345
.
----------------------------------------------------------------------
Ran 1 test in 0.002s
OK