前兩個函數display_pane_1
和template_1
在方法test_1
中易於測試 。我想將這兩個函數重構爲一個函數display_pane_2
。是否可以模擬一個lambda表達式?
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表達式,即lambda x: 'hell mum'
應該失敗。
我試過兩種解決方案。
第一個選項是test_1
的簡單副本,用lambda
的模擬替換參數lambdademo.template_1
。我在手冊中找不到任何內容,暗示我應該如何嘲笑像lambda這樣的表達式。 如果是在手冊中,請告訴我在哪裏。
我的第二個選擇是在Stack Overflow和Internet上進行更廣泛的搜索。 'python expression unittest'缺少響應命中, 'python lambda unittest','python expression mock'或'python lambda mock' 暗示我可能會問錯誤的問題。我的假設是否需要模擬lambda表達式?
我知道一個簡單的編碼解決方案將保留原始代碼,但在這一點上我更感興趣填補我的知識空白。
爲什麼要以這種方式組合這些功能?如果你想能夠模擬'template_1'的功能,似乎最好將它暴露給嘲笑。 – user2357112
@ user2357112。 +1,因爲它也是A.P.I.的一部分,所以在需要測試時使用lambda表達式的智慧進行質疑。代碼。但是,我的好奇心是針對如果情況要求使用它的情況下如何測試它的一個簡單問題。在我看來,任何有效的Python代碼都應該是可測試的,程序員需要知道如何測試它。 – lemi57ssss