我想使用python unittest框架和mockito来测试这个类。
class ISightRequestEngine(object):
def __init__(self, pInputString=None):
self.__params = (pInputString)
def openHTTPConnection(self):
pass
def __closeHTTPConnection(self):
pass
def testFunc(self):
print 'test function called'
def startEngine(self):
self.__params.parseinputString()
self.openHTTPConnection()
self.testFunc()
def processRequest(self, header = None):
pass
我想测试函数startEngine()调用testFunc()。
与我们在模拟课程中所做的相似,
obj = mock(ISightRequestEngine)
obj.startEngine()
try:
verify(obj).startEngine()
except VerificationError:
不幸的是,这仅验证是否调用了startEngine函数,但是它没有给出实际的函数调用,我无法验证是否已经调用了testFunc()。
有没有办法测试这种情况? 我是测试世界和框架的新手。
答案 0 :(得分:1)
在你的例子中,你正在测试你的模拟。
ISightRequestingEngine
startEngine()
方法您想要做的是:
testFunc()
startEngine()
testFunc()
我对mockito不熟悉,但是我可以从the documentation得到什么,我想你必须做以下事情:
from mockito import mock, verify
# Setup ---------------------------------------------
my_mock = mock(ISightRequestingEngine)
system_under_test = ISightRequestingEngine()
system_under_test.testFunc = my_mock.testfunc # Mock out only testFunc()
# Exercise ------------------------------------------
system_under_test.startEngine()
# Verify --------------------------------------------
verify(my_mock).testFunc()
答案 1 :(得分:0)
有类似的问题,我在编写测试用例时有点迷失
class UserCompanyRateLimitValidation:
def __init__(self, user_public_key):
self.adapter = UserAdapter(user_public_key)
container = self.adapter.get_user_company_rate_limit()
super(UserCompanyRateLimitValidation, self).__init__(container,\
UserCompanyRateLimitValidation.TYPE)
我必须测试这个功能。我写了类似这样的测试用例。我试图模拟UserAdapter类,但我无法完全这样做。
def test_case_1():
self.user_public_key = 'TEST_USER_PUBLIC_KEY_XXXXXX1234567890XXXXX'
UserAdapter_mock = mock(UserAdapter)
when(UserAdapter_mock).get_user_company_rate_limit().\
thenReturn(self.get_container_object())
self.test_obj = UserCompanyRateLimitValidation(self.user_public_key)
如果您看到我已经通过testable函数container = self.adapter.get_user_company_rate_limit()
模拟了get_user_company_rate_limit()调用
但我仍然无法弄清楚我可以模仿这个电话的方式,
self.adapter = UserAdapter(user_public_key)