Unittests¶
[1]:
def add(a, b):
return a + b
[2]:
import unittest
class TestNotebook(unittest.TestCase):
def test_add(self):
self.assertEqual(add(2, 2), 5)
unittest.main(argv=[""], verbosity=2, exit=False)
test_add (__main__.TestNotebook.test_add) ... FAIL
======================================================================
FAIL: test_add (__main__.TestNotebook.test_add)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/var/folders/hk/s8m0bblj0g10hw885gld52mc0000gn/T/ipykernel_33771/2216555184.py", line 6, in test_add
self.assertEqual(add(2, 2), 5)
AssertionError: 4 != 5
----------------------------------------------------------------------
Ran 1 test in 0.001s
FAILED (failures=1)
[2]:
<unittest.main.TestProgram at 0x10323bdd0>
Alternativ kann auch ipython-unittest verwendet werden. Dies ermöglicht die Verwendung der folgenden Cell Magics in iPython:
%%unittest_mainführt Testfälle aus, die in einer Zelle definiert sind%%unittest_testcaseerstellt einen Testfall mit der in einer Zelle definierten Funktion und führt ihn aus%%unittestkonvertiert Pythonassertin Unittest-Funktionen%%externalum externe Unittests durchzuführen%%write {mode}um externe Dateien zu schreiben
[3]:
%reload_ext ipython_unittest
[4]:
%%unittest_main
class MyTest(unittest.TestCase):
def test_1_plus_1_equals_2(self):
sum = 1 + 1
self.assertEqual(sum, 2)
def test_2_plus_2_equals_4(self):
self.assertEqual(2 + 2, 4)
Success
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
[4]:
<unittest.runner.TextTestResult run=2 errors=0 failures=0>
[5]:
%%unittest_testcase
def test_1_plus_1_equals_2(self):
sum = 1 + 1
self.assertEqual(sum, 2)
def test_2_plus_2_equals_4(self):
self.assertEqual(2 + 2, 4)
Success
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
[5]:
<unittest.runner.TextTestResult run=2 errors=0 failures=0>
[6]:
%%unittest
"1 plus 1 equals 2"
sum = 1 + 1
assert sum == 2
"2 plus 2 equals 4"
assert 2 + 2 == 4
Success
..
----------------------------------------------------------------------
Ran 2 tests in 0.000s
OK
[6]:
<unittest.runner.TextTestResult run=2 errors=0 failures=0>
Standardmäßig trennt Docstring in dieser Magie die Unittest-Methoden. Wenn jedoch keine Docstrings verwendet werden, erstellen die Cell Magics für jede assert-Methode.
Diese Cell Magics unterstützen optionale Argumente:
-p(--previous)Psetzt den Cursor auf P Zellen vor (Standardwert:
-1entspricht der nächsten Zelle)Dies funktioniert jedoch nur, wenn auch jupyter_dojo installiert ist.
-s(--stream)Slegt den Ooutput-Stream fest (Standardwert:
sys.stdout)-t(--testcase)Tdefiniert den Namen des TestCase für
%%unittestund%%unittest_testcase-u(--unparse)gibt den Quellcode nach den Transformationen aus