我需要为凭证检查模块编写单元测试,如下所示。我道歉我无法复制确切的代码..但我尽力简化为例。 我想修补methodA所以它返回False作为返回值并测试MyClass以查看它是否抛出错误。 cred_check是文件名,MyClass是类名。 methodA在MyClass之外,返回值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....
我想在unittest中编写的部分是返回http_exception 部分。我正在考虑通过修补methodA来返回False。设置返回值后,编写单元测试的正确方法是什么,以便按预期工作?
答案 0 :(得分:0)
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()
它应该以这种方式工作。
答案 1 :(得分:0)
您需要在unittest中测试http_exception
返回案例:
patch
cred_check.methodA
返回False
MyClass()
对象(您也可以使用Mock
)MyClass.methodB()
,您可以在其中传递MagicMock
作为请求,并检查返回值是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