Метод do_thing
является методом экземпляра класса MyClass
, NOT . Вы утверждаете, MockMyClass.do_thing.assert_called_once()
не правильно. Вот решение для модульного тестирования:
my_class.py
:
class MyClass:
def __init__(self):
pass
def do_thing(self):
return 5
main.py
:
from my_class import MyClass
def my_func():
instance = MyClass()
instance.do_thing()
test_main.py
:
from main import my_func
import unittest
from unittest.mock import patch
class TestMain(unittest.TestCase):
@patch('main.MyClass')
def test_my_func(self, MockMyClass):
mock_my_class_instance = MockMyClass.return_value
my_func()
mock_my_class_instance.do_thing.assert_called_once()
if __name__ == '__main__':
unittest.main()
Результаты модульных испытаний с отчетом о покрытии:
.
----------------------------------------------------------------------
Ran 1 test in 0.001s
OK
Name Stmts Miss Cover Missing
-----------------------------------------------------------------------
src/stackoverflow/60539392/main.py 4 0 100%
src/stackoverflow/60539392/my_class.py 5 2 60% 3, 6
src/stackoverflow/60539392/test_main.py 10 0 100%
-----------------------------------------------------------------------
TOTAL