我目前正在尝试学习如何使用Python进行单元测试,并介绍了Mocking的概念,我是一名初学Python开发人员,希望学习TDD的概念以及我的Python技能开发。我正在努力学习用Python unittest.mock documentation.的用户给定输入来模拟类的概念。如果我能得到一个如何模拟某个函数的例子,我将非常感激。我将使用此处的示例:Example Question
class AgeCalculator(self):
def calculate_age(self):
age = input("What is your age?")
age = int(age)
print("Your age is:", age)
return age
def calculate_year(self, age)
current_year = time.strftime("%Y")
current_year = int(current_year)
calculated_date = (current_year - age) + 100
print("You will be 100 in", calculated_date)
return calculated_date
请有人可以使用Mocking创建我的示例单元测试,以自动化年龄输入,以便返回模拟年龄为100的年份。
谢谢。
答案 0 :(得分:1)
您可以在Python3.x中模拟buildins.input方法,并使用with语句来控制模拟时段的范围。
import unittest.mock
def test_input_mocking():
with unittest.mock.patch('builtins.input', return_value=100):
xxx
答案 1 :(得分:0)
在这里 - 我修复了calculate_age()
,你试试`calculate_year。
class AgeCalculator: #No arg needed to write this simple class
def calculate_age(): # Check your sample code, no 'self' arg needed
#age = input("What is your age?") #Can't use for testing
print ('What is your age?') #Can use for testing
age = '9' # Here is where I put in a test age, substitutes for User Imput
age = int(age)
print("Your age is:", age)
#return age -- Also this is not needed for this simple function
def calculate_year(age): # Again, no 'Self' arg needed - I cleaned up your top function, you try to fix this one using my example
current_year = time.strftime("%Y")
current_year = int(current_year)
calculated_date = (current_year - age) + 100
print("You will be 100 in", calculated_date)
return calculated_date
AgeCalculator.calculate_age()
从我在你的代码中看到的,你应该查看如何构建函数 - 并且请不要以冒犯性的方式接受它。您也可以通过运行来手动测试您的功能。正如你的代码所代表的那样,它不会运行。
祝你好运!答案 2 :(得分:-1)
你不是模拟输入,而是功能。在这里,模仿input
基本上是最容易做的事情。
from unittest.mock import patch
@patch('yourmodule.input')
def test(mock_input):
mock_input.return_value = 100
# Your test goes here