在 class 之外模拟一个方法
Mocking a method outside of a class
我需要为凭证检查模块编写单元测试,如下所示。很抱歉,我无法复制确切的代码。但我已尽力简化示例。
我想修补 methodA,使其 returns False 作为 return 值并测试 MyClass 以查看它是否抛出错误。 cred_check 是文件名,MyClass 是 class 名称。 methodA 在 MyClass 之外并且 return 值 checkedcredential 是 True 或 False。
def methodA(username, password):
#credential check logic here...
#checkedcredential = True/False depending on the username+password combination
return checkedcredential
class MyClass(wsgi.Middleware):
def methodB(self, req):
username = req.retrieve[constants.USER]
password = req.retrieve[constants.PW]
if methodA(username,password):
print(“passed”)
else:
print(“Not passed”)
return http_exception...
我目前的单元测试看起来像...
import unittest
import mock
import cred_check import MyClass
class TestMyClass(unittest.Testcase):
@mock.patch('cred_check')
def test_negative_cred(self, mock_A):
mock_A.return_value = False
#not sure what to do from this point....
单元测试中我想写的部分是returnhttp_exception部分。我正在考虑通过将 methodA 修补为 return False 来实现。设置 return 值后,编写单元测试以使其按预期工作的正确方法是什么?
import unittest
import mock
import cred_check import MyClass
class TestMyClass(unittest.Testcase):
@mock.patch('cred_check.methodA',return_value=False)
@mock.patch.dict(req.retrieve,{'constants.USER':'user','constants.PW':'pw'})
def test_negative_cred(self, mock_A,):
obj=MyClass(#you need to send some object here)
obj.methodB()
应该是这样的。
你需要在单元测试中做些什么来测试 http_exception
return 案例是:
patch
cred_check.methodA
到 return False
- 实例化一个
MyClass()
对象(你也可以使用Mock
代替)
- 调用
MyClass.methodB()
,您可以在其中传递 MagicMock
作为请求,并检查 return 值是否是 http_exception
的实例
你的测试变成:
@mock.patch('cred_check.methodA', return_value=False, autospec=True)
def test_negative_cred(self, mock_A):
obj = MyClass()
#if obj is a Mock object use MyClass.methodB(obj, MagicMock()) instead
response = obj.methodB(MagicMock())
self.assertIsInstance(response, http_exception)
#... and anything else you want to test on your response in that case
我需要为凭证检查模块编写单元测试,如下所示。很抱歉,我无法复制确切的代码。但我已尽力简化示例。 我想修补 methodA,使其 returns False 作为 return 值并测试 MyClass 以查看它是否抛出错误。 cred_check 是文件名,MyClass 是 class 名称。 methodA 在 MyClass 之外并且 return 值 checkedcredential 是 True 或 False。
def methodA(username, password):
#credential check logic here...
#checkedcredential = True/False depending on the username+password combination
return checkedcredential
class MyClass(wsgi.Middleware):
def methodB(self, req):
username = req.retrieve[constants.USER]
password = req.retrieve[constants.PW]
if methodA(username,password):
print(“passed”)
else:
print(“Not passed”)
return http_exception...
我目前的单元测试看起来像...
import unittest
import mock
import cred_check import MyClass
class TestMyClass(unittest.Testcase):
@mock.patch('cred_check')
def test_negative_cred(self, mock_A):
mock_A.return_value = False
#not sure what to do from this point....
单元测试中我想写的部分是returnhttp_exception部分。我正在考虑通过将 methodA 修补为 return False 来实现。设置 return 值后,编写单元测试以使其按预期工作的正确方法是什么?
import unittest
import mock
import cred_check import MyClass
class TestMyClass(unittest.Testcase):
@mock.patch('cred_check.methodA',return_value=False)
@mock.patch.dict(req.retrieve,{'constants.USER':'user','constants.PW':'pw'})
def test_negative_cred(self, mock_A,):
obj=MyClass(#you need to send some object here)
obj.methodB()
应该是这样的。
你需要在单元测试中做些什么来测试 http_exception
return 案例是:
patch
cred_check.methodA
到 returnFalse
- 实例化一个
MyClass()
对象(你也可以使用Mock
代替) - 调用
MyClass.methodB()
,您可以在其中传递MagicMock
作为请求,并检查 return 值是否是http_exception
的实例
你的测试变成:
@mock.patch('cred_check.methodA', return_value=False, autospec=True)
def test_negative_cred(self, mock_A):
obj = MyClass()
#if obj is a Mock object use MyClass.methodB(obj, MagicMock()) instead
response = obj.methodB(MagicMock())
self.assertIsInstance(response, http_exception)
#... and anything else you want to test on your response in that case