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_main
führt Testfälle aus, die in einer Zelle definiert sind%%unittest_testcase
erstellt einen Testfall mit der in einer Zelle definierten Funktion und führt ihn aus%%unittest
konvertiert Pythonassert
in Unittest-Funktionen%%external
um 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
)P
setzt den Cursor auf P Zellen vor (Standardwert:
-1
entspricht der nächsten Zelle)Dies funktioniert jedoch nur, wenn auch jupyter_dojo installiert ist.
-s
(--stream
)S
legt den Ooutput-Stream fest (Standardwert:
sys.stdout
)-t
(--testcase
)T
definiert den Namen des TestCase für
%%unittest
und%%unittest_testcase
-u
(--unparse
)gibt den Quellcode nach den Transformationen aus