我已經搜索了幾個小時。甚至找不到任何人試圖做到這一點。嗯。如何在python單元測試中覆蓋(不補丁)單一方法
我相信我必須重寫類實例中的單個方法。我做不是的意思是patch(return_value=)
。我需要讓有問題的方法做一些涉及self
的事情。
我會盡量分解它。寬鬆意譯和包括的很多東西我試過了,這是不行的一個...
class SetupClass(object):
def set_some_stuff(self):
data_list = functon_cannot_be_run_on_test_platform()
self.something = data_list[0]
self.something_else = data_list[1]
class UUT(object):
self.config = SetupClass()
assert self.config.something == 'foo'
class UnitTests(TestCase):
@patch('SetupClass')
def test_UUT(self, mock1):
def WedgeClass(SetupClass):
def set_some_stuff(self):
self.something = 'foo'
pass # I'm a Python newbie, in too deep
wedge_class = WedgeClass()
mock1.return_value = wedge_class # doesn't work. context errors
uut = UUT() # <-- would crash here, because assert above
假設我不能更改UUT
或SetupClass
。
由於SetupClass.functon_cannot_be_run_on_test_platform()
的原因,斷言將失敗,因此測試甚至無法啓動。 請注意,只是嘲諷SetupClass.functon_cannot_be_run_on_test_platform
不會解決問題,因爲原因。
自動取款機,我想唯一的方法來解決這個混亂是以某種方式覆蓋SetupClass.set_some_stuff
。我不能簡單地嘲笑整個班級,因爲UUT
也嚴重依賴其他功能。我需要一切工作,除了這一個方法和我需要該方法能夠訪問,self
在原來的意圖相同的上下文中。
我嘗試了各種涉及子類和mock.return_value等事情,我寧願不記得造成的痛苦。 :p
我的王國爲測試驅動的代碼在第一位!這段代碼包含了一個co-dependencies的卷積。 : -/
從示例代碼我寫了我的頭在咖啡館的頂部的多個錯誤
'class'必須用'類UUT'開始,不是'高清UUT'和Ident是關閉 – Gang
@Gang ...哦,是的。只是錯別字。我已經編輯了十幾次僞代碼。抱歉。目前的版本更接近我實際嘗試的版本。 – gruvin
'def WedgeClass'應該在'class UnitTests'之外?函數'__init __()'或其他函數中的'class UUT'中有2行? – Gang