在unittest.main中的exit = False(exit = False)

时间:2019-06-28 10:17:43

标签: ipython

在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没有将其配置为默认值。

0 个答案:

没有答案