Junior
Тестілеу контекстінде моктау (mocking) дегеніміз не?
sobes.tech AI
AI-дан жауап
Мокирование – бұл тестіленетін объектінің тәуелділіктерінің мінез-құлқын имитациялайтын мок объектілерін жасау. Бұл тестіленетін компонентті оқшаулау және оның логикасын сыртқы жүйелермен (дерекқорлар, желілік қызметтер және т.б.) өзара әрекеттесуінсіз тексеру үшін жасалады. Моктар қайтарылатын мәндерді және қателерді бақылауға, сондай-ақ тестіленетін объектінің тәуелділіктерімен қалай әрекеттесетінін тексеруге мүмкіндік береді (белгілі бір әдістердің белгілі бір аргументтермен шақырылғанын).
Моктау қажеттілігі:
- Оқшаулау: Тек қарастырылып жатқан компоненттің логикасы тестіленеді.
- Жылдамдық: Тәуелділіктерді моктау тестілерді тез орындауға мүмкіндік береді, сыртқы қызметтердің жауаптарын күтпестен.
- Сенімділік: Тестілер сыртқы жүйелердің жағдайына тәуелді емес, бұл олардың тұрақтылығын арттырады.
- Шекара жағдайларын тестілеу: Қателерді немесе күтпеген мінез-құлықты имитациялау оңай.
Python-да моктау үшін танымал кітапханалар:
unittest.mock: Стандартты кітапханаға кіріктірілген модуль.pytest-mock: pytest үшін плагин, ыңғайлы фикстураmocker-ді ұсынады.
unittest.mock қолдану мысалы:
# Бастапқы код
class Service:
def get_data(self):
# Сыртқы қызметке сұрау
pass
class Processor:
def __init__(self, service):
self._service = service
def process(self):
data = self._service.get_data()
return f"Өңделді: {data}"
# Processor-ді тестілеу үшін моктау
import unittest
from unittest.mock import Mock
class TestProcessor(unittest.TestCase):
def test_process_calls_service(self):
# Service үшін мок құру
mock_service = Mock()
# get_data қайтаруы тиіс мәнді көрсету
mock_service.get_data.return_value = "Тестілеу деректері"
# Мокпен тестіленетін объект құру
processor = Processor(mock_service)
result = processor.process()
# get_data әдісінің шақырылғанын тексеру
mock_service.get_data.assert_called_once()
# Нәтижені тексеру
self.assertEqual(result, "Өңделді: Тестілеу деректері")
if __name__ == '__main__':
unittest.main()