тестирование метода с двумя input () в консольном приложении - PullRequest
0 голосов
/ 03 апреля 2019

Мое консольное приложение просто добавляет два числа:

  def add():
    a=int(input('Enter first number '))
    b= int(input('Enter second number '))
    return a + b

как мне выполнить модульное тестирование вышеуказанным методом? Я попробовал следующее, но я не могу передать ему два значения:

import unittest

from unittest.mock import patch


@patch('builtins.input', return_value='2')
@patch('builtins.input', return_value='3')
def test_add(self,  a, b ):
    self.assertEqual(result, 5)

В то время как я не получаю подсказки, спрашивающие числа во время тестирования, тесты не пройдены, потому что оба a и b равны 2.

1 Ответ

1 голос
/ 04 апреля 2019

Параметр side_effect можно использовать для создания фиктивного объекта, который возвращает разные значения при каждом его вызове. Передайте ему список или другую итерацию, содержащую каждое из ваших возвращаемых значений.

Вы можете установить этот атрибут напрямую,

import unittest
from unittest.mock import patch

def add():
    a=int(input('Enter first number '))
    b= int(input('Enter second number '))
    return a + b

class Tester(unittest.TestCase):
    @patch('builtins.input')
    def test_add(self, input_mock):
        input_mock.side_effect = [2,3]
        result = add()
        self.assertEqual(result, 5)

if __name__ == '__main__':
    unittest.main()

Или укажите это в декораторе.

import unittest
from unittest.mock import patch

def add():
    a=int(input('Enter first number '))
    b= int(input('Enter second number '))
    return a + b

class Tester(unittest.TestCase):
    @patch('builtins.input', side_effect=[2,3])
    def test_add(self, input_mock):
        result = add()
        self.assertEqual(result, 5)

if __name__ == '__main__':
    unittest.main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...