[[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)