Мета-программирование - это весело, но можно начать. Большинство решений здесь затрудняют:
- выборочно запустить тест
- указать код, указанный в названии теста
Итак, мое первое предложение - следовать простому / явному пути (работает с любым участником тестирования):
import unittest
class TestSequence(unittest.TestCase):
def _test_complex_property(self, a, b):
self.assertEqual(a,b)
def test_foo(self):
self._test_complex_property("a", "a")
def test_bar(self):
self._test_complex_property("a", "b")
def test_lee(self):
self._test_complex_property("b", "b")
if __name__ == '__main__':
unittest.main()
Поскольку мы не должны повторяться, мое второе предложение основано на ответе @ Javier: охватить тестирование на основе свойств. Библиотека гипотез:
- «более неуклонно коварен в создании тестовых примеров, чем мы, простые люди»
- предоставит простые примеры подсчета
- работает с любым участником теста
имеет много других интересных функций (статистика, дополнительный вывод теста, ...)
класс TestSequence (unittest.TestCase):
@given(st.text(), st.text())
def test_complex_property(self, a, b):
self.assertEqual(a,b)
Чтобы проверить ваши конкретные примеры, просто добавьте:
@example("a", "a")
@example("a", "b")
@example("b", "b")
Чтобы запустить только один конкретный пример, вы можете закомментировать другие примеры (при условии, что пример будет запущен первым). Вы можете использовать @given(st.nothing())
. Другой вариант - заменить весь блок на:
@given(st.just("a"), st.just("b"))
Хорошо, у вас нет разных имен тестов. Но, может быть, вам просто нужно:
- описательное название тестируемого объекта.
- , какой вход приводит к сбою (пример фальсификации).
Более смешной пример