【发布时间】:2021-09-17 04:57:33
【问题描述】:
我正在使用 unittest 测试一个方法 createData,它会在我的数据库中创建一些东西。
def createData(self, content):
logging.info("Creating data...")
request = requests.post(self.url, data=content)
if request.status_code == 201:
logging.info("Data created")
else:
logging.error("Data not created")
return request
所以我创建了两个测试:一个是我创建数据失败的测试,self.assertNotEqual(201, badRequest.status_code),另一个是我成功的测试,self.assertEqual(201, goodRequest.status_code)。当然,之后,我会删除这些数据。
我想在不创建任何数据的情况下进行此测试。所以我像这样嘲笑回应:
import unittest, logging
from data import Data as data
from unittest.mock import Mock
class TestData(unittest.TestCase):
def testCreateDataSuccess(self):
mock_response = Mock()
mock_response.status_code = 201
with self.assertLogs() as captured:
data.createData(data, goodContent).return_value = mock_response
self.assertEqual(201, mock_response.status_code)
self.assertEqual(captured.records[1].levelname, 'INFO')
但是,尽管进行了模拟,但还是在我的数据库中创建了一个数据。你能告诉我我不明白的地方吗?
感谢您的帮助!
【问题讨论】:
-
你能发布整个测试吗?
createData(badContent).return_value = mock_response可能没有做你期望的事情 -
可能是的,我是 Python 和测试的初学者 -_-'
-
查看更多测试内容会很有帮助:包括在测试文件顶部的导入。测试文件多长时间?你能把整件事都贴出来吗?
-
其实只是缩进错误,非常抱歉!但你是对的,mock 并没有像我想的那样做,因为再次创建了一个数据......
标签: python python-3.x unit-testing mocking python-unittest