Mockaus ja testieristys
Pyyhkäise näyttääksesi valikon
Mocking on tehokas tekniikka yksikkötestauksessa, jonka avulla voit korvata testattavan järjestelmän osia mock-olioilla tai -funktioilla. Tavoitteena on eristää testattava koodiyksikkö sen riippuvuuksista, kuten tietokannoista, API-rajapinnoista tai muista monimutkaisista järjestelmistä. Mockien avulla voit hallita riippuvuuksien käyttäytymistä ja keskittyä testaamaan koodisi logiikkaa hallitussa ympäristössä.
Testien eristäminen on tärkeää, koska se varmistaa, etteivät testit häiritse toisiaan eivätkä ole riippuvaisia ulkopuolisista tekijöistä. Eristetyt testit ovat luotettavampia ja helpompia debugata, koska niiden tulokset riippuvat vain testattavasta koodista ja määrittelemistäsi olosuhteista, eivät ulkoisten järjestelmien tilasta tai käyttäytymisestä.
Pythonissa unittest.mock-moduuli tarjoaa työkalut olioiden ja funktioiden mockaamiseen. Mockingilla voit korvata oikean funktion tai olion mockilla, joka palauttaa hallittuja arvoja tai tallentaa, miten sitä on käytetty. Tämä on erityisen hyödyllistä, kun koodisi on vuorovaikutuksessa resurssien kanssa, jotka ovat hitaita, arvaamattomia tai eivät ole saatavilla testauksen aikana.
12345678910111213141516171819202122232425import unittest from unittest.mock import patch def check_the_sky(): # Simulate a slow or unreliable API raise ConnectionError("API not available") def get_advice(): if check_the_sky(): return "Take an umbrella." else: return "Enjoy the sunshine!" class TestWeather(unittest.TestCase): @patch('__main__.check_the_sky') def test_advice_when_rainy(self, mock_check): mock_check.return_value = True self.assertEqual(get_advice(), "Take an umbrella.") @patch('__main__.check_the_sky') def test_advice_when_clear(self, mock_check): mock_check.return_value = False self.assertEqual(get_advice(), "Enjoy the sunshine!") unittest.main(argv=[''], exit=False)
Tässä koodiesimerkissä check_the_sky-funktio simuloi ulkoista riippuvuutta, joka on epäluotettava tai rikki, kuten sää-API, joka ei aina ole käytettävissä. get_advice-funktio sisältää testattavan logiikan — se kutsuu check_the_sky-funktiota ja palauttaa neuvon tuloksen perusteella.
unittest-testiluokka käyttää mocking-tekniikkaa korvatakseen oikean check_the_sky-funktion mockilla, joka palauttaa hallittuja arvoja. Näin voit testata, miten get_advice käyttäytyy eri tilanteissa, kuten kun taivas on selkeä tai sateinen, ilman että olet riippuvainen oikeasta ulkoisesta järjestelmästä.
@patch-koristetta käytetään korvaamaan oikea check_the_sky-funktio mock-oliolla jokaisen testimetodin ajaksi. Mock-olio välitetään testimetodille mock_check-parametrina. mock_check-olion avulla asetat haluamasi palautusarvon kyseiselle testille, jolloin voit hallita koodisi käyttäytymistä ja palautteita eri tilanteissa.
Tämän oppitunnin funktio unittest.main() sisältää muutamia ylimääräisiä parametreja, joita tarvitaan vain tässä oppimisympäristössä. Ne auttavat koodia toimimaan oikein alustalla, eivätkä ole osa ydinasioita, jotka sinun tarvitsee oppia Pythonista juuri nyt.
Mockauksen avulla testit voidaan eristää ulkoisista järjestelmistä, jotka voivat olla hitaita tai epäluotettavia. Tämä tekee testeistä nopeita, toistettavia ja deterministisiä, koska voit hallita tarkasti, mitä riippuvuus palauttaa jokaisessa testitapauksessa.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme