2014-02-20 2 views
0

Я хочу протестировать этот класс, используя python unittest framework, а также mockito.Тестирование вызова функции внутри функции с использованием инфраструктуры python unittest

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() был выполнен или нет.

Есть ли способ проверить этот сценарий? Я новичок в тестировании мира и каркаса.

ответ

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() 
+0

это должно полностью решить мою проблему. Я проверю это и уточню, работает ли это для меня или нет. –

+0

НЕ РАБОТАЕТ. Я получаю сообщение об ошибке: Ошибка типа: объект «mock» не может быть вызван. –

+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) 

Вот если вы видите, что я издевался get_user_company_rate_limit() вызов из тестируемой функции, container = self.adapter.get_user_company_rate_limit() , но я до сих пор не в состоянии понять, каким образом я могу высмеивать этот вызов,

self.adapter = UserAdapter(user_public_key) 
Смежные вопросы