Тереӊ тестирлөө: моктор жана фикстуралар
Фикстуралар, параметрлештирүү, моктор жана камтуу: реалдуу дүйнө менен иштешкен кодду кантип тестирлөө керек
assert жазууну үйрөтөт. Реалдуу системалар таза эмес: алар тармакка кайрылат, файлдарды окуйт, маалымат базалары менен иштейт жана сааттан убакытты алат. Мындай кодду тестирлөө үчүн аны дүйнөдөн обочолонтуу керек - тесттик дублёрлор (моктор) менен, кайра колдонула турган абалды фикстуралар менен курат, бир тестти көп киришке параметрлештирүү менен айдайт, анан тесттериӊ чындыгында эмнени козгогонун камтуу менен өлчөйт. Ушул төрт чеберчилик "мен тест жаздым" дегенди "мен каалаган нерсени тестирлей алам" дегенге айландырат.
@pytest.fixtureфункцияларын жазуу жана аларды параметр аты боюнча киргизүү,- фикстуранын туура көрүнүү аймагын тандоо жана
yieldаркылуу артынан тазалоо, - бир тестти көп учурга
@pytest.mark.parametrizeменен айдоо, - реалдуу көз карандылыктарды
unittest.mockжанаpatch()менен алмаштыруу, "ат изделген жерде патчтоо" эрежесин колдонуу, - кайтаруучу маанилерди, каптал таасирлерди жана мок үстүндөгү текшерүүлөрдү тууралоо,
- камтууну өлчөө жана окуу жана эмне үчүн 100% "катасыз" дегенди билдирбешин түшүнүү.
1. Фикстуралар: көз карандылыкты киргизүү катары орнотуу
Фикстура - бул @pytest.fixture декоратору менен функция, ал тестке керектүү объектти жаратат: убактылуу маалымат базасы, тууралган клиент, үлгү жазуу. Тест фикстураны жөн гана атын параметр катары жазып сурайт. pytest атты көрөт, фикстураны аткарат жана анын натыйжасын берет. Бул көз карандылыкты киргизүү: тест эмне керек экенин жарыялайт, а pytest аны берет.
import pytest
@pytest.fixture
def account():
return {"balance": 100, "owner": "ada"}
def test_withdraw(account): # pytest фикстураны аты боюнча киргизет
account["balance"] -= 30
assert account["balance"] == 70
Эмнени жазбаганыӊызга көӊүл буруӊуз: тесттин башында эч кандай орнотуу чакырыгы да, глобалдык абал да жок. account деп атаган ар бир тест өзүнүн жаӊы курулган сөздүгүн алат, ошондуктан тесттер бири-бирине абалды агызбайт. Фикстуралар башка фикстураларды да сурай алат, ошентип кичине бөлүктөрдөн толук чөйрөнү курууга болот.