я хочу добавить несколько тестов, чтобы мои тестовые примеры, вместо того, чтобы делать следующее:Динамического добавления тестов для моих тестовых случаев
class TestRestart(unittest.TestCase):
...
def test_modes(self):
for mode in modes:
machine.set_mode(mode)
self.assertTrue(machine.restart())
во многих моих тестах, я хочу, чтобы проверить каждый режим в своей собственной функции , Я сейчас не в состоянии использовать библиотеки, такие как нос. Я думал, что я мог бы использовать метод add_tests
ниже, чтобы помочь мне сделать это:
import unittest
def build_name_1(a):
return "test " + str(a[0]) + "_" + str(a[1])
def build_name_2(a):
return "test " + str(a[0]) + "_" + str(a[1]) + "_" + str(a[2])
def add_tests(cls, args, name_builder):
for a in args:
def tb(a):
return lambda self: self.test_body(*a)
setattr(cls, name_builder(a), tb(a))
class TestEqual(unittest.TestCase):
def test_body(self, i, j):
self.assertNotEquals(0, i-j)
args = ((0,0),(1,1))
add_tests(TestEqual, args, build_name_1)
class TestBetween(unittest.TestCase):
def test_body(self, i, j, k):
self.assertTrue(i<j<k)
args = ((2,1,2),(2,2,3))
add_tests(TestBetween, args, build_name_2)
if __name__ == '__main__':
unittest.main()
Можно ли переместить add_tests
вызов внутри классов TestEqual и TestBetween вместо того, чтобы их вне классов, как я выше? Разве это не было бы лучше?
Какие улучшения я могу сделать для add_tests
? Как я могу заставить его обрабатывать именованные аргументы?
Вам необходимо более подробно ознакомиться с вашими данными. Похоже, вы хотите проверить что-то в функции, а затем, если оно соответствует критериям, выполните больше тестов или, возможно, продолжите работу? –
Если это так, вам нужно настроить внутреннее состояние в своей функции, это проще всего сделать с классами. В противном случае вам нужно будет запустить первый тест и вернуть параметры ко второму, а затем вызвать второе. –