[[oktatas:programozás:python|< Python]]
====== unittest ======
* **Szerző:** Sallai András
* Copyright (c) 2020, Sallai András
* Szerkesztve: 2024
* Licenc: [[https://creativecommons.org/licenses/by-sa/4.0/|CC BY-SA 4.0]]
* Web: https://szit.hu
===== A unittest =====
A unittest egy Python programozói könyvtár, automatizált tesztek létrehozására.
Dokumentáció:
* https://docs.python.org/3/library/unittest.html (2024)
===== A unittest használata =====
def calcArea(base, height):
return base*height/2
import haromszog
import unittest
class TestHaromszog(unittest.TestCase):
def testCalcAreaNormal(self):
self.assertEqual(haromszog.calcArea(30, 35), 525.0, 'Az eredmény 525.0 kell legyen')
def testCalcAreaLowLeft(self):
self.assertEqual(haromszog.calcArea(1, 35), 17.5, 'Az eredmény 17.0 kell legyen')
if __name__ == "__main__":
unittest.main()
A függvények kötelezően "test" szóval kell kezdődjenek!
def test_valami():
pass
Kötelező:
if __name__ == "__main__":
Egyszerűen futtassuk a programot.
===== Igaz vagy hamis =====
#...
def test_calcArea_with_float_values(self):
self.assertTrue(type(calcArea(4.5, 5.5)) == float,
'Az eredmény float kell legyen, ha az alap 4.5 és a magasság 5.5')
===== Tesztek átlépése =====
@unittest.skip('Ez most ne fusson')
def test_calcArea_in_4_5_to_10(self):
self.assertEqual(calcArea(4, 5), 10,
'Az eredmény 10 kell legyne')
from haromszog import calcArea
import unittest
class TestHaromszog(unittest.TestCase):
@unittest.skip('Ez most ne fusson')
def test_calcArea_in_4_5_to_10(self):
self.assertEqual(calcArea(4, 5), 10,
'Az eredmény 10 kell legyne')
def test_calcArea_with_zero_base(self):
self.assertEqual(calcArea(0, 5), 0, 'Az eredmény 0 kell legyen, ha az alap 0')
if __name__ == '__main__':
unittest.main()
A futtatás csak akkor működik "Play" gombbal, ha a tesztelendő fájl nincs külön könyvtárban.
Ilyen esetben futtassuk parancssorból vagy VSCode-ban a "Testing" eszközzel.
===== Strukturált könyvtár =====
app01/
|-app/
| `-triangle.py
`-tests/
`-test_triangle.py
def calcArea(base, height):
return (base * height) / 2
from app.triangle import calcArea
import unittest
class TestTriangle(unittest.TestCase):
def test_bemenet_30_35(self):
actual = calcArea(30, 35)
expected = 525;
self.assertEqual(actual, expected)
Futtatás:
python3 -m unittest test/test_triangle.py
===== VSCode =====
VSCode-ban használhatjuk a futtatást, de akár használhatjuk a "Testing" eszközt.
Lépések:
* Kattintsunk a lombikra
* "Configure Python Tests" gomb
* Válasszuk ki: "**unittest** Standard Python test framework"
* . Root directory
* *test.py
{{:oktatas:programozas:python:vscode_no_tests.png|}}
{{:oktatas:programozas:python:vscode_python_select_test-framework.png|}}
{{:oktatas:programozas:python:vscode_python_select_test-directory.png|}}
{{:oktatas:programozas:python:vscode_python_select_test-filename.png|}}
Beállítás után kapsz egy fájlt:
* .vscode/settings.json
==== Strukturált könyvtár ====
app01/
|-app/
| `-triangle.py
`-test/
`-test_triangle.py
{
"python.testing.unittestArgs": [
"-v",
"-s",
"./test",
"-p",
"test*.py"
],
"python.testing.pytestEnabled": false,
"python.testing.unittestEnabled": true,
}
from app.triangle import calcArea
import unittest
class TestTriangle(unittest.TestCase):
def test_bemenet_30_35(self):
actual = calcArea(30, 35)
expected = 525;
self.assertEqual(actual, expected)
Ha VSCode-ból futtatjuk nem szükséges a if blokkjában a unittest.main() a fájl végén!
==== Extra útvonal használata ====
{
"python.testing.unittestArgs": [
"-v",
"-s",
"./test",
"-p",
"test*.py"
],
"python.testing.pytestEnabled": false,
"python.testing.unittestEnabled": true,
"python.analysis.extraPaths": [
"./app"
]
}
Extra útvonal esetén nem szükséges megadni az src könyvtárat.
from triangle import calcArea
import unittest
class TestTriangle(unittest.TestCase):
def test_bemenet_30_35(self):
actual = calcArea(30, 35)
expected = 525;
self.assertEqual(actual, expected)