Первые две функции display_pane_1
и template_1
легко тестируются по методу test_1
. Я хочу реорганизовать эти две функции в одну функцию display_pane_2
.Можно ли издеваться над выражением лямбда?
lambdademo.py:
def display_pane_1():
display_register(template_1)
def template_1():
return 'hello mum'
def display_pane_2():
display_register(lambda: 'hello mum')
def display_register(template):
print(template())
test_lambdademo.py
import unittest
import unittest.mock as mock
import lambdademo
class TestLambda1(unittest.TestCase):
def setUp(self):
p = mock.patch('lambdademo.display_register')
self.mock_display_register = p.start()
self.addCleanup(p.stop)
def test_1(self):
lambdademo.display_pane_1()
self.mock_display_register.assert_called_with(lambdademo.template_1)
def test_2(self):
lambdademo.display_pane_2()
self.mock_display_register.assert_called_with('????????')
Можете ли вы помочь мне написать правильный тест для display_pane_2
? Я хотел бы протестировать полное лямбда-выражение, то есть lambda x: 'hell mum'
должно потерпеть неудачу.
Я пробовал два пути к решению.
Первый вариант - простая копия test_1
, заменяющая аргумент lambdademo.template_1
макету lambda
. Я не мог найти ничего в руководстве, которое подсказывает, как мне высмеивать выражение, подобное лямбда. Если это в руководстве, пожалуйста, скажите мне, где.
Мой второй вариант следует из более широкого поиска здесь, в разделе «Переполнение стека» и в Интернете. Отсутствие ответных хитов для выражения python unittest, «python lambda unittest», «python expression mock» или «python lambda mock» предположил, что я могу задать неправильный вопрос. Является ли мое предположение, что мне нужно будет издеваться над выражением лямбды?
Я знаю, что простым решением для кодирования было бы сохранить исходный код, но на данный момент меня больше интересует заполнение пробела в моих знаниях.
Зачем совмещать эти функции таким образом? Если вы хотите быть в состоянии фальсифицировать функциональность 'template_1', лучше всего оставить ее выставленной для насмешки. – user2357112
@ пользователь2357112. +1 для опроса мудрости использования лямбда-выражения, когда он нуждается в тестировании, потому что он также является частью A.P.I. для кода.Однако мое любопытство было направлено на более простой вопрос о том, как проверить его, если обстоятельства требуют его использования. Мне кажется, что любой действительный код Python должен быть тестируемым, и программисту необходимо знать, как его проверить. – lemi57ssss