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

62 lines
1.8 KiB
Markdown
Raw Normal View History

2017-02-26 13:28:18 +01:00
+++
title = "testing"
draft = false
tags = [
"code",
"python",
"testing"
]
date = "2014-03-05"
+++
# Python Unit Testing
## unittest module
Spreekt voor zich:
```python
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:
```python
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.