我有一個UUT
類,它實例化Worker
對象,並調用它們的do_stuff()
方法。
的Worker
對象使用一個Provider
對象爲兩件事情:蟒蛇模擬得到調用對象
- 提供商對象上的調用方法通過訂閱與提供商的事件的方法做一些東西
- 獲取來自供應商的通知
當工作人員得到通知時,它會處理它,通知UUT
對象,該對象在響應中可以創建更多Worker
對象。
我已經測試過每個班級,我想一起測試UUT
+ Worker
。爲此,我打算嘲笑Provider
。
import mock
import unittest
import provider
class Worker():
def __init__(self, *args):
resource.default_resource.subscribe('on_spam', self._on_spam) # I'm going to patch 'resource.default_resource'
def do_stuff(self):
self.resource.do_stuff()
def _on_spam(self, message):
self._tell_uut_to_create_more_workers(message['num_of_new_workers_to_create'])
class UUT():
def __init__(self, *args):
self._workers = []
def gen_worker_and_do_stuff(self, *args)
worker = Worker(*args)
self._workers.append(resource)
worker.do_stuff()
class TestCase1(unittest.TestCase):
@mock.patch('resource.default_resource', spec_set=resource.Resource)
def test_1(self, mock_resource):
uut = UUT()
uut.gen_worker_and_do_stuff('Egg') # <-- say I automagically grabbed the resulting Worker into self.workers
self.workers[0]._on_spam({'num_of_new_workers_to_create':5}) # <-- I also want to get hold of the newly-created workers
有沒有辦法抓住由uut
產生的作業人員對象,不必直接訪問在uut
的_workers
列表(這是一個實現細節)?
我想我可以在Worker.__init__
,那裏的工人訂閱提供商的事件做到這一點,所以我想這個問題簡化爲:主叫resource.default_resource.subscribe('on_spam', self._on_spam)
當
如何我在被叫提取self
,?
你想要什麼是不可能的。如果它不可測試,請更改您的API。 – schlamar
或者你可以修改'Worker'類。 – schlamar
@ ms4py - 我在單元測試階段修補了'Worker'類。現在我正在進行集成測試,並且我希望看到整個堆棧一起工作 – bavaza