Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

error running unittest #17

Open
yamad opened this issue May 25, 2017 · 1 comment
Open

error running unittest #17

yamad opened this issue May 25, 2017 · 1 comment

Comments

@yamad
Copy link

yamad commented May 25, 2017

Running tests using unittest from the standard library gives an error about unrecognized arguments. I know this is supposed to be an unmaintained module, but I wonder if IPython already has a standard way of hiding ipython specific args.

Maybe a little unusual to actually want to run unittest inside a repl, but the standard repl handles this without error.

A minimal testcase shows the issue:

$ ipython --TerminalIPythonApp.interactive_shell_class=rlipython.TerminalInteractiveShell
Python 3.6.1 (default, Apr  4 2017, 09:40:51)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.0.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import unittest

In [2]: class IpythonTest(unittest.TestCase):
   ...:     def test_test(self):
   ...:         self.assertTrue(True)
   ...:

In [3]: unittest.main()
usage: ipython [-h] [-v] [-q] [--locals] [-f] [-c] [-b] [tests [tests ...]]
ipython: error: unrecognized arguments: --TerminalIPythonApp.interactive_shell_class=rlipython.TerminalInteractiveShell
An exception has occurred, use %tb to see the full traceback.

SystemExit: 2

/usr/local/lib/python3.6/site-packages/IPython/core/interactiveshell.py:2855: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
  warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)

In [4]: %tb
---------------------------------------------------------------------------
SystemExit                                Traceback (most recent call last)
<ipython-input-3-7d361a096586> in <module>()
----> 1 unittest.main()

/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/main.py in __init__(
self, module, defaultTest, argv, testRunner, testLoader, exit, verbosity, failfast, catchbreak, buffer, warnings, tb
_locals)
     91         self.testLoader = testLoader
     92         self.progName = os.path.basename(argv[0])
---> 93         self.parseArgs(argv)
     94         self.runTests()
     95

/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/unittest/main.py in parseArg$
(self, argv)
    124                 return
    125         else:
--> 126             self._main_parser.parse_args(argv[1:], self)
    127
    128         if self.tests:

/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/argparse.py in parse_args(se$
f, args, namespace)
   1731         if argv:
   1732             msg = _('unrecognized arguments: %s')
-> 1733             self.error(msg % ' '.join(argv))
   1734         return args
   1735

/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/argparse.py in error(self, m$
ssage)
   2387         self.print_usage(_sys.stderr)
   2388         args = {'prog': self.prog, 'message': message}
-> 2389         self.exit(2, _('%(prog)s: error: %(message)s\n') % args)

/usr/local/Cellar/python3/3.6.1/Frameworks/Python.framework/Versions/3.6/lib/python3.6/argparse.py in exit(self, st$
tus, message)
   2374         if message:
   2375             self._print_message(message, _sys.stderr)
-> 2376         _sys.exit(status)
   2377
   2378     def error(self, message):

SystemExit: 2

For reference, on vanilla IPython, the tests actually run but some noise complains at the end too:

$ ipython
Python 3.6.1 (default, Apr  4 2017, 09:40:51)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.0.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: import unittest

In [2]: class IpythonTest(unittest.TestCase):
   ...:     def test_test(self):
   ...:         self.assertTrue(True)
   ...:

In [3]: unittest.main()
.
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK
An exception has occurred, use %tb to see the full traceback.

SystemExit: False

/usr/local/lib/python3.6/site-packages/IPython/core/interactiveshell.py:2855: UserWarning: To exit: use 'exit', 'quit', or Ctrl-D.
  warn("To exit: use 'exit', 'quit', or Ctrl-D.", stacklevel=1)
@kmcminn
Copy link

kmcminn commented Jun 12, 2019

this issue is a tad old I realize, but this is because sys.argv is already being populated by ipython's args. Use:

unittest.main(__name__, argv=['main'], exit=False)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants