Тестовые подписи Python на макетированных объектах

Есть ли способ в CPython смоделировать объект, чтобы сигнатура смоделированного объекта все еще проверялась? Например, возьмите следующее:

MyModule.py

from OtherModule import OtherClass

class MyObject:

   def MyMethod(self):

       val1 = \
           OtherObject.OtherMethod("Test", [1,2,3])
       return val1

OtherModule.py

class OtherObject:

   def OtherMethod(self):

       someOtherCall(self, arg1:str, arg2:list)
           #complicated function calls here
       return val1

MyTest.py

import unittest
from unittest import mock
from MyModule import myObject
from OtherModule import otherObject

Class Test_myObject(unittest.testcase):
    def test_myObject(self):
        with patch("OtherModule.OtherClass.OtherMethod") \
            as mock_OtherMethod

            myObj = myObject()
            actualval = \
               myObject.MyMethod()

            self.assertEqual(actualVal, 
                             "my expected value")

Так что в этом примере я тестирую все и смоделирую вызов OtherObject.OtherMethod, потому что он содержит тяжелую обработку, которую я не хочу во всех моих тестах. Однако, поскольку я использовал макет, я не проверяю, будет ли подпись OtherObject.OtherMethod принимать параметры, передаваемые ему. Так что в этом случае, если, скажем, кто-то изменил подпись OtherObject.OtherMethod, требуя три аргумента, мой тест все равно будет пройден, потому что я заменил вызов на ложный. Было бы гораздо лучше, чтобы интерпретатор оценивал вызов сигнатуры в тесте, а затем заменял все другие свойства и методы объекта. Есть ли способ сделать это?

0 ответов

Другие вопросы по тегам