Аргументы вызова функции проверки Python - PullRequest
0 голосов
/ 01 июня 2018

Я разрабатываю модульные тесты для существующей библиотеки, и я хотел бы проверить, соответствуют ли аргументы, вызываемые функцией, определенным критериям.В моем случае, функция для тестирования:

class ...
    def function(self):
        thing = self.method1(self.THING)
        thing_obj = self.method2(thing)
        self.method3(thing_obj, 1, 2, 3, 4)

Для модульных тестов я пропатчил методы 1, 2 и 3 следующим образом:

import unittest
from mock import patch, Mock

class ...
    def setUp(self):

        patcher1 = patch("x.x.x.method1")
        self.object_method1_mock = patcher1.start()
        self.addCleanup(patcher1.stop)

        ...

        def test_funtion(self)
            # ???

В модульном тестеЯ хотел бы извлечь аргументы 1, 2, 3, 4 и сравнить их, например, посмотреть, если третий аргумент меньше, чем четвертый (2 <3).Как бы я продолжил это с макетом или другой библиотекой? </p>

1 Ответ

0 голосов
/ 06 июня 2018

Вы можете получить самые последние аргументы вызова из макета, используя атрибут call_args.Если вы хотите сравнить аргументы вызова self.method3(), то вы можете сделать что-то вроде этого:

def test_function(self):
    # Call function under test etc. 
    ...
    # Extract the arguments for the last invocation of method3
    arg1, arg2, arg3, arg4, arg5 = self.object_method3_mock.call_args[0]
    # Perform assertions
    self.assertLess(arg3, arg4)

Дополнительная информация здесь на call_args, а также call_args_list.

...