A TDD a Test-Driven Development rövidítése. Magyarul teszt vezérelt fejlesztés.
Írjunk egy tesztet amely betölti a Haromszog osztályt, amikor az még nem is létezik:
import haromszog haromszog.Haromszog()
Futtassuk a tesztet. A teszt elszáll, mivel nem létezik a triangle fájl.
Most annyi kódot írjunk, ami teljesíti a tesztet.
class Haromszog(): pass
Futtassuk a tesztet. A teszt teljesül.
Lehet jobb lenne angol elnevezésekkel.
from triangle import Triangle
class Triangle(): pass
Most fejlesszük a tesztet, addig, amíg meghívja a Triangle osztályban a calcArea() függvényt.
from triangle import Triangle def testCalcAreaExist(): Triangle.calcArea() testCalcAreaExist()
Most futtassuk a tesztet. A teszt elbukik, mivel még nem létezik a Triangle osztályban calcArea() függvény.
Most fejlesszünk annyit a Triagnle osztályon, hogy teljesüljön a teszt.
class Triangle(): def calcArea(): pass
Futtassuk a tesztet. A teszt most teljesül.
A teszt számára is készíthetünk osztályt:
from triangle import Triangle import unittest class TestTriangle(unittest.TestCase): def testCalcAreaExist(self): Triangle.calcArea() if __name__ == "__main__": unittest.main()
A if __name__ == "__main__": sor kötelező a a TestCase osztály indításához.
Fejlesszük a tesztet. A calcArea() függvényhívásnál adjunk át egy alapot, legyen ez most 30.
class TestTriangle(unittest.TestCase): def testCalcAreaExist(self): Triangle.calcArea(30) if __name__ == "__main__": unittest.main()
Teszteljünk. A teszt elbukik, mivel a calcArea() függvény nem fogad semmilyen paramétert.
Fejlesszük a calcArea() függvényt addig, hogy elfogadja a base paramétert.
class Triangle(): def calcArea(base): pass
Futtassuk a tesztet. A teszt teljesül.
class TestTriangle(unittest.TestCase): def testCalcAreaOneParameter(self): Triangle.calcArea(30) if __name__ == "__main__": unittest.main()
Fejlesszük a tesztet. Adjuk át a magasság értéket is a calcArea() függvénynek. Futtassuk a tesztet. A teszt elbukik, mert csak egy paramétert fogad a függvény.
class TestTriangle(unittest.TestCase): def testCalcAreaOneParameter(self): Triangle.calcArea(30, 35) if __name__ == "__main__": unittest.main()
Futtassuk a tesztet. A teszt elbukik.
Fejlesszük a calcArea() függvényt, amíg teljesíti a tesztet.
class Triangle(): def calcArea(b, h): pass
Futtassuk a tesztet. A teszt teljesül.
class TestTriangle(unittest.TestCase): def testCalcAreaTwoParameter(self): Triangle.calcArea(30, 35) if __name__ == "__main__": unittest.main()
class Triangle(): def calcArea(base, height): pass
Fejlesszük a tesztet. A calcArea() függvénytől elvárjuk, hogy adja vissza az alapból és magasságból kiszámolt 525.0 értéket. Vizsgáljuk meg, hogy a megfelelő értéket kaptuk-e.
from triangle import Triangle import unittest class TestTriangle(unittest.TestCase): def testCalcAreaTwoParameter(self): area = Triangle.calcArea(30, 35) self.assertEqual(area, 525.0, 'Az elvárt érték 525.0') if __name__ == "__main__": unittest.main()
Futtassuk a tesztet. A teszt elbukik.
Fejlesszük a függvényt addig, hogy visszaadja a 525.0 értéket.
class Triangle(): def calcArea(base, height): return 525.0
Futtassuk a tesztet. Teljesült.
class TestTriangle(unittest.TestCase): def testCalcAreaNormalParameter(self): area = Triangle.calcArea(30, 35) self.assertEqual(area, 525.0, 'Az elvárt érték 525.0') if __name__ == "__main__": unittest.main()
Fejlesszük a tesztet. A calcArea() függvénynek más bemenő paraméterek mellett is helyes értéket kell visszaadnia. Legyenek a bemenő paraméterek most 52 és 48. Ekkor 1248-t kell kapnunk. Ezt egy újabb függvényben írjuk meg a teszten belül.
from triangle import Triangle import unittest class TestTriangle(unittest.TestCase): def testCalcAreaNormalParameter(self): area = Triangle.calcArea(30, 35) self.assertEqual(area, 525.0, 'Az elvárt érték 525.0') def testCalcAreaNormalParameter2(self): area = Triangle.calcArea(52, 48) self.assertEqual(area, 1248.0, 'Az elvárt érték 1248.0') if __name__ == "__main__": unittest.main()
Futtassuk a tesztet. Az első teszt teljesül, de a második elbukik.
Fejlesszük tovább az ipari kódot, amíg teljesül mindkét teszt.
class Triangle(): def calcArea(base, height): area = base*height/2 return area
Futtassuk a tesztet. A teszt teljesül.
class Triangle(): def calcArea(base, height): return base*height/2
Fejlesszük a tesztet. A programunk negatív szám esetén adjon vissza -1-t.
from triangle import Triangle import unittest class TestTriangle(unittest.TestCase): def testCalcAreaNormalParameter(self): area = Triangle.calcArea(30, 35) self.assertEqual(area, 525.0, 'Az elvárt érték 525.0') def testCalcAreaNormalParameter2(self): area = Triangle.calcArea(52, 48) self.assertEqual(area, 1248.0, 'Az elvárt érték 1248.0') def testCalcAreaNegative(self): area = Triangle.calcArea(-5, 48) self.assertEqual(area, -1, 'Az elvárt érték -1')
Futtassuk a tesztet. A teszt elbukik.
Fejlesszük az ipari kódot, amíg teljesül teszt.
class Triangle(): def calcArea(base, height): if base < 0: return -1 else: return base*height/2
class Triangle(): def calcArea(base, height): if base < 0 or height < 0: return -1 else: return base*height/2