最初の2つの機能display_pane_1
とtemplate_1
は、test_1
の方法で簡単に でテストされます。私はこれらの2つの機能を単一の機能にリファクタリングしたいです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'
が失敗するかどうかをテストしたいと思います。
ソリューションへの2つのパスを試しました。
最初のオプションは、の単純なコピーで、lambdademo.template_1
の引数をlambda
のモックに置き換えます。私はラムダのような表現をどのように模倣すべきかを示唆しているマニュアルの中には何も見つかりませんでした。 マニュアルに記載されている場合は、どこに教えてください。
私の2番目の選択肢は、スタックオーバーフローとインターネット上での幅広い検索の結果です。 'python expression unittest'、 'python lambda unittest'、 'python expression mock'、または 'python lambda mock' が、間違った質問をしている可能性があると回答しました。間違ったラムダ式を模倣する必要があるという私の前提ですか?
私は、単純なコード化の解決策は元のコードを保持することであると認識していますが、この時点で私の知識のギャップを埋めることにもっと興味があります。
これらの機能をこのように組み合わせる理由は何ですか? 'template_1'の機能をモックできるようにしたいのであれば、それを黙らせておくことをお勧めします。 – user2357112
@ user2357112それがA.P.I.の一部でもあるため、ラムダ式をテストする必要があるときにラムダ式を使用することの知恵に疑問を呈するために+1。コードのために。しかし、私の好奇心は、それが使用されることが状況によっては、それをテストするという簡単な質問に向けられていました。どのような有効なPythonコードでもテスト可能であり、プログラマーはそれをテストする方法を知る必要があると私には思われます。 – lemi57ssss