Вот функция, которую я хочу проверить:
def send_something():
conn = lib.conn.SSH1
conn.open()
conn.send('ls\n')
if 'home' not in conn.recbuf:
return lib.FAIL
conn.send('whoami\n')
if USER not in conn.recbuf:
return lib.FAIL
return lib.PASS
Каждый раз, когда я вызываю conn.send (), результат вызова сохраняется в conn.recbuf. Чтобы проверить это, мне нужно, чтобы conn.recbuf отличался при каждом вызове. (Я знаю, что мог бы просто изменить conn.recbuf на строку, содержащую как home, так и USER, но это не сработает для более сложных функций)
Вот что я придумал в своем тесте:
@mock.patch.object(demo_sequence.lib, 'conn')
def test_send_something(mock_conn):
mock_conn.SSH1.recbuf = 'home'
assert demo_sequence.lib.PASS == demo_sequence.send_something()
mock_conn.SSH1.send.assert_any_call('ls\n')
mock_conn.SSH1.send.assert_any_call('whoami\n')
Очевидно, что это не сработало, потому что conn.recbuf только home и не содержит USER.
Мне нужно что-то вроде conn.recbuf.side_effect = ['home', USER], но оно будет работать, когда просто ссылаешься на recbuf и не вызываешь его.