我有一个测试套件,我在其中创建对象的实例,并用我的模拟消费者替换该对象中的kafka使用者,例如:
def mock_consumer(fixtures):
with open(fixtures) as fixturefile:
messages = fixturefile.readlines()
for msg in messages:
encoded = mock.MagicMock()
encoded.value.decode = lambda x: msg
yield encoded
然后我使用mock_consumer来创建我的对象的实例:
@pytest.fixture
@patch('service.producer.kafka_init')
def msg_producer_test1(mock_kafka_init):
pr = producer(config)
pr.balanced_consumer = mock_consumer('tests/test1.json')
return pr
然后我写测试:
def test_that_we_process_message_correctly(msg_producer_test1):
msg_producer_test1.process()
assert (result = what_we_expect)
但是我想把它抽象出去,所以我会做类似的事情:
def test_we_process_message_correctly(mock_msg_producer, 'tests/test1.json')
mock_msg_producer.process()
最好的方法是什么?