brainbaking/content/wiki/code/python/testing.md

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:

  1. extenden van unittest.TestCase
  2. voldoen aan python module structuur. Testen in files met prefix "test_x.py".
  3. 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.