在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)
咨询多个参考文献
:Using Python unittest in IPython or Jupyter – Vlad Bezden – Medium
Unable to run unittest's main function in ipython/jupyter notebook
一种解决方案是:
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)'有效,它有什么缺点吗?cos Ipython没有将其配置为默认值。