I am giving an example which throws an error in ipython/jupyter notebook, but runs fine as an individual script.
import unittest
class Samples(unittest.TestCase):
def testToPow(self):
pow3 = 3**3
assert pow3==27
if __name__ == '__main__':
unittest.main()
The error is below:
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-7-232db94ae8b2> in <module>()
8
9 if __name__ == '__main__':
---> 10 unittest.main()
/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.pyc in __init__(self, module, defaultTest, argv, testRunner, testLoader, exit, verbosity, failfast, catchbreak, buffer)
92 self.testLoader = testLoader
93 self.progName = os.path.basename(argv[0])
---> 94 self.parseArgs(argv)
95 self.runTests()
96
/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.pyc in parseArgs(self, argv)
147 else:
148 self.testNames = (self.defaultTest,)
--> 149 self.createTests()
150 except getopt.error, msg:
151 self.usageExit(msg)
/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/main.pyc in createTests(self)
156 else:
157 self.test = self.testLoader.loadTestsFromNames(self.testNames,
--> 158 self.module)
159
160 def _do_discovery(self, argv, Loader=None):
/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/loader.pyc in loadTestsFromNames(self, names, module)
128 of string specifiers. See 'loadTestsFromName()'.
129 """
--> 130 suites = [self.loadTestsFromName(name, module) for name in names]
131 return self.suiteClass(suites)
132
/usr/local/Cellar/python/2.7.10_2/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/loader.pyc in loadTestsFromName(self, name, module)
98 obj = module
99 for part in parts:
--> 100 parent, obj = obj, getattr(obj, part)
101
102 if isinstance(obj, types.ModuleType):
AttributeError: 'module' object has no attribute '/Users/root3d/Library/Jupyter/runtime/kernel-c5225ac4-4b0e-4473-ae0a-3e051a704561'
What could be the possible problem? How should I write tests in notebook, then?
Jupyter doesn't load or doesn't work in the browserTry disabling any browser extensions and/or any Jupyter extensions you have installed. Some internet security software can interfere with Jupyter. If you have security software, try turning it off temporarily, and look in the settings for a more long-term solution.
To run the unit tests, you can either just execute the cell, and then the result of the unit test is printed below the cell of the Jupyter Notebook.
To launch Jupyter Notebook App: Click on spotlight, type terminal to open a terminal window. Enter the startup folder by typing cd /some_folder_name . Type jupyter notebook to launch the Jupyter Notebook App The notebook interface will appear in a new browser window or tab.
Unit testing with unittestWe can basically do the same thing in our Jupyter notebook. We can make a unitest. TestCase class, perform the tests we want, and then just execute the unit tests in any cell.
unittest.main
looks at sys.argv
by default, which is what started IPython, hence the error about the kernel connection file not being a valid attribute. You can pass an explicit list to main
to avoid looking up sys.argv.
In the notebook, you will also want to include exit=False
to prevent unittest.main from trying to shutdown the kernel process:
unittest.main(argv=['first-arg-is-ignored'], exit=False)
You can pass further arguments in the argv list, e.g.
unittest.main(argv=['ignored', '-v'], exit=False)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With