Learning Python using automated test
So… I was watching the classes of Python for Zumbies (Brazilian Portuguese course) and I came across some code to do. There are some ways to see my code working:
- Try by myself;
- Ask for someone else to try to use it, and the best of all;
- Writing automated test code 🙌;
So the best way to learn was writing automated test code;
Fibonacci number
First, of course, I am going to create the test.
After looking up for information I found out this to fib_test.py
:
import unittest
from fib import fib
class FibTestCase(unittest.TestCase):
def test_fib1(self):
self.assertEqual(fib(1), 1)
def test_fib0(self):
self.assertEqual(fib(0), 0)
def test_fib6(self):
self.assertEqual(fib(6), 8)
def test_fib6_again(self):
self.assertTrue(fib(6) == 8)
unittest.main()
If you call it you receive this error:
$ python fib_test.py
Traceback (most recent call last):
File "fib_test.py", line 2, in <module>
from fib import fib
ImportError: No module named 'fib'
So far so good, I did not write the code, let's create it, file fib.py
:
def fib(n):
if n < 2:
return(n)
a = fib(n-1)
b = fib(n-2)
return(a+b)
If we call it we have:
$ python fib_test.py
....
----------------------------------------------------------------------
Ran 4 tests in 0.000s
OK
Object Orientation
While learning about object orientation I got the following example.
First the test:
import unittest
from television import Television
class TelevisionTestCase(unittest.TestCase):
def setUp(self):
self.tv = Television('Room')
def test_a_new_tv_is_off(self):
self.assertFalse(self.tv.on)
def test_i_can_change_the_status(self):
self.tv.on = True
self.assertTrue(self.tv.on)
def test_i_can_change_the_channel(self):
self.tv.plus_channel
selft.assertEqual(self.tv.channel, 2)
unittest.main()
Now the class:
class Television:
def __init__(self, local):
self.on = False
self.channel = 1
self.local = local
This example of Television
I used TDD, aka, red/green/refactor.
There is a method missing in Television
, if you are studying python take it as an exercise 😉.