使用python unittest fram测试函数内部的函数调用

2024-10-01 09:38:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用pythonunittest框架和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()的函数。在

就像我们在嘲讽班上做的一样

^{pr2}$

不幸的是,这只验证startEngine函数是否被调用,但它没有给出实际的函数调用,而且我无法验证是否调用了testFunc()。在

有什么方法可以测试这个场景吗? 我是测试世界和框架的新手。在


Tags: 函数self框架nonedefpassparamsclass
2条回答

在您的示例中,您正在测试您的mock。在

  • 创建ISightRequestingEngine的模拟
  • 您调用该模拟的startEngine()方法
  • 验证对象是否为mock

你想做的是:

  • 模拟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()

有类似的问题,我在编写测试用例时有点不知所措

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类,但我不能完全这样做。在

^{pr2}$

在这里,如果您看到我模拟了来自可测试函数的get_user_company_rate_limit()调用,container = self.adapter.get_user_company_rate_limit() 但我还是想不出怎样才能嘲笑这个电话

 self.adapter = UserAdapter(user_public_key)

相关问题 更多 >