A TDD (Test Driven Development) egy szoftverfejlesztési módszertan, amelyben a teszteket a tényleges kód írása elõtt hozzuk létre. Ez egy fordított megközelítés a hagyományos fejlesztéshez képest.
A TDD három alapvetõ lépésbõl áll, amelyeket ciklikusan ismételünk:
Elõször írunk egy tesztet, amely az elvárt viselkedést fejezi ki. Mivel az adott funkciót még nem implementáltuk, a teszt sikertelen lesz (piros).
Ezután a lehetõ legegyszerûbb kódot írjuk meg, amely szükséges ahhoz, hogy a teszt zöld (sikeres) legyen. Nem kell a tökéletességre törekedni, csak a tesztet kell teljesíteni.
A végén megtisztítjuk, optimalizáljuk és rendezzük a kódot, miközben a teszt zöld marad. Eltávolítjuk a duplikációkat, javítunk az olvashatóságon.
Ezt a három lépést addig ismételjük, amíg az összes funkciót meg nem valósítjuk.
Írj egy függvényt, amely visszaadja egy adott szám faktoriálisát.
Teszt:
import unittest
class TestFactorial(unittest.TestCase):
def test_factorial(self):
self.assertEqual(factorial(5), 120)
def test_factorial_zero(self):
self.assertEqual(factorial(0), 1)
def test_factorial_negative(self):
with self.assertRaises(ValueError):
factorial(-1)
if __name__ == '__main__':
unittest.main()
Megoldás (kezdetben nem működik):
def factorial(n):
pass
TDD lépések:
Megoldás (működik):
def factorial(n):
if n < 0:
raise ValueError("n nem lehet negatív")
elif n == 0:
return 1
else:
result = 1
for i in range(1, n + 1):
result *= i
return result
Az alábbi feladatokhoz írj függvényeket, amelyek a kívánt funkciókat valósítják meg. A függvényeket a TDD elvei alapján fejleszd és teszteld!
add(a, b)
test_add_positive, test_add_negative, test_add_zerosubtract(a, b)
test_subtract_positive, test_subtract_negative, test_subtract_zeromultiply(a, b)
test_multiply_positive, test_multiply_negative, test_multiply_zerodivide(a, b)
ZeroDivisionError-t.test_divide_positive, test_divide_negative, test_divide_zerois_even(n)
True-t, ha a szám páros, egyébként False-t.test_is_even_positive, test_is_even_negative, test_is_even_zerois_odd(n)
True-t, ha a szám páratlan, egyébként False-t.test_is_odd_positive, test_is_odd_negative, test_is_odd_zeromax(a, b)
test_max_positive, test_max_negative, test_max_equalmin(a, b)
test_min_positive, test_min_negative, test_min_equalabsolute(n)
test_absolute_positive, test_absolute_negative, test_absolute_zerosquare(n)
test_square_positive, test_square_negative, test_square_zerosum_of_even_numbers(numbers)
test_sum_of_even_numbers_positive, test_sum_of_even_numbers_negative, test_sum_of_even_numbers_emptycount_odd_numbers(numbers)
test_count_odd_numbers_positive, test_count_odd_numbers_negative, test_count_odd_numbers_emptyfind_max_number(numbers)
ValueError-t.test_find_max_number_positive, test_find_max_number_negative, test_find_max_number_emptyfind_min_number(numbers)
ValueError-t.test_find_min_number_positive, test_find_min_number_negative, test_find_min_number_emptyis_palindrome(s)
True-t, ha a bemeneti string palindrom, egyébként False-t. A palindrom olyan szó, mondat vagy karaktersorozat, amely visszafelé olvasva is pontosan ugyanaz, mint előrefelé.test_is_palindrome_positive, test_is_palindrome_negative, test_is_palindrome_emptyremove_duplicates(numbers)
test_remove_duplicates_positive, test_remove_duplicates_negative, test_remove_duplicates_emptyfind_common_elements(list1, list2)
test_find_common_elements_positive, test_find_common_elements_negative, test_find_common_elements_emptyis_prime(n)
True-t, ha a bemeneti szám prímszám, egyébként False-t.test_is_prime_positive, test_is_prime_negative, test_is_prime_zerofind_factors(n)
test_find_factors_positive, test_find_factors_negative, test_find_factors_zerois_sorted(numbers)
True-t, ha a bemeneti lista rendezett, egyébként False-t.test_is_sorted_positive, test_is_sorted_negative, test_is_sorted_emptyfind_max(numbers)
find_min(numbers)
is_sorted(numbers)
True-t ad vissza, ha a lista rendezett.False-t ad vissza, ha a lista nem rendezett.remove_duplicates(numbers)
find_common_elements(list1, list2)
calculate_area(shape, side)
calculate_perimeter(shape, side)
is_rectangle(sides)
True-t ad vissza, ha a négyszög téglalap.False-t ad vissza, ha a négyszög nem téglalap.find_diagonals(sides)