Увод у тестирање на Питхон-у

Управо сте завршили са писањем дела кода и питате се шта да радите. Да ли ћете предати захтев за повлачење и затражити од саиграча да прегледају код или ћете га ручно тестирати? Требало би да урадите све ове ствари, али са додатним кораком: потребно је да јединствено тестирате свој код како бисте били сигурни да код ради како је предвиђено.

Јединствени тестови могу проћи или проћи, а то их чини одличном техником за проверу вашег кода. У овом упутству ћу показати како писати јединствене тестове у Питхону и како је лако покренути их у вашем пројекту.

Почетак

Најбољи начин на који можете разумети тестирање је ако то радите практично. У ту сврху ћу у датотеку која се зове наме_фунцтион.пи написати једноставну функцију која узима име и презиме и враћа пуно име:

Функција форматтед_наме () узима име и презиме и комбинује их са размаком између њих да би формирала пуно име. Затим се великим словом ставља прво слово сваке речи. Да бисте проверили да ли овај код функционише, морате да напишете неки код који користи ову функцију. У намес.пи ћу написати једноставан код који омогућава корисницима да уносе своја имена и презимена:

Овај код увози форматтед_наме () из наме_фунцтион.пи и при покретању, омогућава кориснику да унесе низ имена и презимена и приказује форматирана пуна имена.

Јединствени тест и тест случајеви

У Питхоновој стандардној библиотеци постоји модул назван униттест који садржи алате за тестирање вашег кода. Јединствено тестирање проверава да ли су сви специфични делови понашања ваше функције тачни, што ће учинити њихово интеграцију заједно са осталим деловима много лакшим.

Тест пример је збирка јединичних тестова који заједно доказују да функција ради како је предвиђено, у читавом низу ситуација у којима се та функција може наћи и за које се очекује да ће је решити. Тест случај треба да размотри све могуће врсте уноса које функција може добити од корисника, и стога треба да укључи тестове који представљају сваку од ових ситуација.

Полагање теста

Ево типичног сценарија за писање тестова:

Прво треба да направите тест датотеку. Затим увезите униттест модул, дефинишите класу тестирања која се наслеђује од униттест.ТестЦасе и на крају напишите низ метода за тестирање свих случајева понашања ваше функције.

Објашњење по редовима налази се испод следећег кода:

Прво морате да увезете униттест и функцију коју желите да тестирате, форматтед_наме (). Затим креирате класу, на пример НамесТестЦасе, која ће садржати тестове за вашу функцију форматтед_наме (). Ова класа наслеђује од класе униттест.ТестЦасе.

НамесТестЦасе садржи једну методу која тестира један део форматтед_наме (). Ову методу можете позвати тест_фирст_ласт_наме ().

Имајте на уму да ће се свака метода која започиње са „тест_“ покренути аутоматски када покренете тест_наме_фунцтион.пи.

У оквиру методе теста тест_фирст_ласт_наме (), позивате функцију коју желите да тестирате и чувате повратну вредност. У овом примеру позваћемо форматтед_наме () са аргументима „пете“ и „сеегер“ и сачувати резултат у резултирајућој променљивој.

У последњем реду користићемо методу ассерт. Метод потврде потврђује да се резултат који сте добили подудара са резултатом који сте очекивали. И у овом случају знамо да ће функција форматтед_наме () вратити пуно име с великим почетним словима, па очекујемо резултат „Пете Сеегер“. Да би се то проверило, користи се униттест-ова метода ассертЕкуал ().

self.assertEqual(result, “Pete Seeger”)

Ова линија у основи значи: Упоредите вредност резултујуће променљиве са „Пете Сеегер“ и ако су једнаке у реду је, али ако ме не обавесте.

На покретању тест_наме_фунцтион.пи очекује се да добијете ОК што значи да је тест положен.

Ran 1 test in 0.001s
OK

Неуспех на тесту

Да бих вам показао како изгледа неуспели тест, модификоваћу функцију форматтед_наме () тако што ћу укључити нови аргумент средњег имена.

Дакле, преписаћу функцију тако да изгледа овако:

Ова верзија форматтед_наме () ће радити за људе са средњим именима, али када је тестирате видећете да је функција покварена за људе који немају средње име.

Дакле, када покренете тест_наме_фунцтион.пи добићете излаз који изгледа отприлике овако:

ErrorTraceback (most recent call last):
File “test_name_function.py”, line 7, in test_first_last_name result = formatted_name(“pete”, “seeger”)
TypeError: formatted_name() missing 1 required positional argument: ‘middle_name’
Ran 1 test in 0.002s
FAILED (errors=1)

У излазу ћете видети информације које ће вам рећи све што треба да знате где тест не успе:

  • Прва ставка у излазу је грешка која вам говори да је барем један тест у тест случају резултирао грешком.
  • Затим ћете видети датотеку и метод у којем је дошло до грешке.
  • Након тога видећете ред у којем је дошло до грешке.
  • И о каквој се грешци ради, у овом случају нам недостаје 1 аргумент „средње_име“.
  • Видећете и број покренутих тестова, време потребно за завршетак тестова и текстуалну поруку која представља статус тестова са бројем грешака које су се догодиле.

Шта урадити када тест није успео

Пролазни тест значи да се функција понаша у складу са оним што се од ње очекује. Међутим, неуспели тест значи да је пред вама још забаве.

Видео сам неколико програмера који радије мењају тест уместо да побољшају код - али немојте то. Проведите мало више времена да бисте решили проблем, јер ће вам то помоћи да боље разумете код и дугорочно уштедите време.

У овом примеру, наша функција форматтед_наме () прво је захтевала два параметра, а сада како је преписана захтева један додатни: средње име. Додавање средњег имена нашој функцији сломило је њено жељено понашање. Будући да идеја није да се врше промене на тестовима, најбоље решење је учинити средње име необвезним.

Након што ово урадимо, идеја је да тестови прођу када се користе име и презиме, на пример „Пете Сеегер“, као и када се користе прво, презиме и средње име, на пример „Раимонд Ред Реддингтон“. Па хајде да још једном изменимо код форматтед_наме ():

Сада би функција требала радити за имена са и без средњег имена.

Да бисте били сигурни да и даље ради са „Пете Сеегером“, поново покрените тест:

Ran 1 test in 0.001s
OK
И ово сам намеравао да вам покажем: Увек је боље унети промене у свој код како би одговарао вашим тестовима, него обрнуто. Сада је дошло време да се дода нови тест за имена која имају средње име.

Додавање нових тестова

Напишите нову методу у класу НамесТестЦасе која ће тестирати средња имена:

Након покретања теста, оба теста треба да прођу:

Ran 2 tests in 0.001s
OK
Грудњак! Браво!

Написали сте своје тестове да бисте проверили да ли функција ради користећи имена са или без средњег имена. Пратите други део где ћу говорити више о тестирању на Питхону.

Ове и друге забавне ствари које радим могу се наћи на мом Гитхуб-у: //гитхуб.цом/ГоранАвиани