Итак, я бы сказал, что это два отдельных модульных теста: один для функции a и один для словаря _actions.
_actions - это не просто словарь, а в некотором смысле динамический вызов функции. Так что, если вы действительно тестируете только функцию a, вам нужно исправить объект _actions и просто проверить функциональность в области действия функции.
_actions находится вне области тестирования и должен тестироваться индивидуально, как и любой другой метод.
from unittest import TestCase
from unittest.mock import patch
from stack_overflow import a,b,c, _actions
class TestStack(TestCase):
def setUp(self):
super().setUp()
def tearDown(self):
super().tearDown()
@patch.dict('stack_overflow._actions',{'b':b})
def test_a(self):
self.assertEqual(5,a('b'))
def test__actions_def_b(self):
self.assertEqual(_actions['b'],b)
def test__actions_def_c(self):
self.assertEqual(_actions['c'],c)
def a(type):
current_actions = _actions
return _actions[type]()
def b():
return 5
def c():
return 7
_actions = { 'b': b, 'c': c}