После запуска юнит-теста в Ipython,
In [2]: %paste
import unittest
import sys
def square(n):
return n ** 2
class MyCase(unittest.TestCase):
def test_a(self):
check = square(3)
self.assertEqual(check, 9)
print(sys.argv)
unittest.main()
Сообщение об ошибке:
/home/me/anaconda3/lib/python3.7/site-packages/IPython/core/interactiveshell.py:3304: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
Проконсультируйтесь с несколькими ссылками:
Использование Python unittest в IPython или Jupyter - Влад Безден - Средний
Невозможно запустить основную функцию unittest в записной книжке ipython / jupyter
Одно из решений:
if __name__ == '__main__':
unittest.main(argv=['first-arg-is-ignored'], exit=False)
другой
unittest.main(argv=['ignored', '-v'], exit=False)
Они все правы, но по счастливой случайности.
Решение простое
unittest.main(exit=False)
In [4]: %paste
import unittest
import sys
def square(n):
return n ** 2
class MyCase(unittest.TestCase):
def test_a(self):
check = square(3)
self.assertEqual(check, 9)
print(sys.argv)
unittest.main(exit=False)
## -- End pasted text --
['/home/me/anaconda3/bin/ipython']
.
----------------------------------------------------------------------
Ran 1 test in 0.000s
OK
Out[4]: <unittest.main.TestProgram at 0x7f8d580a8978>
Поскольку их ответы неверны, их аргументы ненадежны.
Почему работает `(exit = False) ', есть ли у него какие-либо недостатки, потому что Ipython не настраивает его как значение по умолчанию.