是的我知道你不应该向unittest发送参数,但在这种情况下我必须这样才能访问当前框架中的一块硬件。由于细节无关的原因,我不能在测试中使用简单的board = myBoard.getBoard()
方法,否则我不会在这里问你们所有人。
class Test(object):
@staticmethod
def __call__(board):
_board = board
global _board
logging.info('Entering a Unit Test')
suite = unittest.TestLoader()
suite = suite.loadTestsFromTestCase(TestCase)
unittest.TextTestRunner().run(suite)
将要求此方法在某个点执行单元测试。这是在当前框架中设置的方式,我只是遵循规则。
你可以在这里看到我分配一个全局变量(可怕)。然后可以通过测试方法轻松访问:
class TestCase(unittest.TestCase):
def runTest(self):
logging.critical('running')
def setUp(self):
logging.critical('setup')
def test_Me(self):
logging.critical('me')
结果是它不会进入runTest
,但会在每个setUp
方法之前test_
。几乎是我想要的,我可以处理它而不是进入runTest
我想做上面但没有全局变量所以我尝试了这个方法:
class Test(object):
@staticmethod
def __call__(board):
logging.info('Entering a basic Unit Test')
suite = unittest.TestSuite() #creates a suite for testing
suite.addTest(BasicCase(board))
unittest.TextTestRunner().run(suite)
class BasicCase(unittest.TestCase):
def __init__(self, board):
self.board = board
logging.critical('init')
super(BasicCase, self).__init__()
def runTest(self):
logging.critical('runtest')
def setUp(self):
logging.critical('reset')
infra.Reset.__call__(self.board) #allows me to pass the board in a much nicer way
def test_Connect(self):
logging.critical('connection')
上述问题是,它显然只会init
,setUp
和runTest
,但它会错过任何test_
方法。
如果我添加:
suite.addTest(BasicCase(board).test_Connect)
然后它不必要地调用init
两次,我必须向test_Connect
添加一个额外的成员变量来接受test
对象。我也可以处理这个问题,因为我可以返回test_
方法的列表,但这似乎很难。此外,我不认为它每次进入新的setUp
方法时都会运行test_
。不理想。
那么我可以使用其他一些方法,允许我快速运行所有类似单元测试但允许我传递board
对象吗?
如果我应该使用不同的python模块,那么请说明,但我使用unittest
,因为我得到了可爱的输出和assert
方法。