1.8 KiB
+++ title = "testing" draft = false tags = [ "code", "python", "testing" ] date = "2014-03-05" +++
Python Unit Testing
unittest module
Spreekt voor zich:
import unittest
from calculator import Calculator
class TestCalculator(unittest.TestCase):
def setUp(self):
self.calc = Calculator().calculate;
def test_calculateBasicNumberReturnsNumber(self):
self.assertEqual(3, self.calc('3'))
def test_calculateSimpleMultiplicationReturnsResult(self):
self.assertEqual(10, self.calc('5*2'))
def test_calculateInvalidStringShouldThrowException(self):
self.assertRaises(ValueError, self.calc, ('blabl'))
Zie http://docs.python.org/3/library/unittest.html
setUp
wordt automatisch aangeroepen. Beforeclass, aftereach etc etc bestaat ook.- alle methods met
test_
worden automatisch herkend.
Hoe voer ik dit nu uit?
Dit stuk onder uw py file plakken:
if __name__ ###### '__main__':
unittest.main()
En dan python -m unittest -v calculatorTest
. de v flag geeft wat extra output, anders staat er gewoon OK. De test op zich builden in bijvoorbeeld sublime met de main method erin zorgt er ook voor dat deze automatisch uitgevoerd wordt.
######= automatic test case discovery ######=
python -m unittest discover
gaat alle unit testen vanaf huidig dir scannen en uitvoeren (instelbaar met params). Moet voldoen aan:
- extenden van
unittest.TestCase
- voldoen aan python module structuur. Testen in files met prefix "test_x.py".
- Indien in subfolder "test": vergeet geen "init.py" file.
############= autotest ############=
Mogelijk met onder andere autonose
(nose is een alternatief voor unittest) en sniffer
. Om die te installeren moet je via de [pip package manager]({{< relref "wiki/code/python/packages.md" >}}) gaan, en dan gewoon sniffer uitvoeren in uw base directory.