@ От ответа dmvianna я очень приблизился к возможности запустить unittest
в ноутбуке с jupyter (ipython), но мне пришлось сделать немного больше.Если бы я написал следующее:
class TestStringMethods(unittest.TestCase):
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
suite = unittest.TestLoader().loadTestsFromModule (TestStringMethods)
unittest.TextTestRunner().run(suite)
Я получил
Запустил 0 тестов за 0,000 с
OK
Он не сломан, но не запускает никаких тестов!Если я инстанцировал тестовый класс
suite = unittest.TestLoader().loadTestsFromModule (TestStringMethods())
(обратите внимание на символы в конце строки; это единственное изменение), я получил бы
ValueError Traceback (самый последнийпоследний вызов) in () ----> 1 suite = unittest.TestLoader (). loadTestsFromModule (TestStringMethods ())
/ usr / lib / python2.7 / unittest / case.pyc в init (self, methodName) 189 кроме AttributeError: 190 повысить ValueError («нет такого метода тестирования в% s:% s»% -> 191 (self. class , methodName)) 192 self._testMethodDoc = testMethod. doc 193 self._cleanups = []
ValueError: нет такого метода тестирования в: runTest
Исправление теперь достаточно понятно:добавьте runTest
к классу теста:
class TestStringMethods(unittest.TestCase):
def runTest(self):
test_upper (self)
test_isupper (self)
test_split (self)
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
suite = unittest.TestLoader().loadTestsFromModule (TestStringMethods())
unittest.TextTestRunner().run(suite)
Выполнено 3 теста за 0,002 с
OK
Это также работает правильно(и запускает 3 теста), если мои runTest
просто pass
es, как предложено @ Darren.
Это немного глупо, требует от меня ручного труда, но это также больше бывшийplicit , и это достоинство Python, не так ли?
Я не смог получить ни одну из техник, вызвав unittest.main
с явными аргументами отсюда или из этого связанного вопроса Невозможнозапустить основную функцию unittest в ноутбуке ipython / jupyter , чтобы работать в ноутбуке jupyter, но я снова в пути с полным баком газа.