У меня есть программное обеспечение, состоящее из двух половинок: одна — это python, работающая на первом компьютере, другая — cpp, работающая на второй.
Они общаются через последовательный порт (tty).
Я хотел бы проверить сторону Python на моем компьютере, предоставив ему правильные данные и посмотреть, будет ли он работать так, как ожидалось.
Я начал использовать подпроцесс, но потом возникла проблема: какие stdin и stdout я должен предоставить?
cStringIO
не работает, потому что нет fileno()
ТРУБА тоже не работает, потому что select.select()
говорит, что есть что почитать, даже если ничего не отправлено
У вас есть какие-нибудь намеки? Есть ли поддельный модуль tty, который я могу использовать?
В идеале вы должны сделать это и просто протестировать поведение, не слишком полагаясь на терминальный ввод-вывод. Ты можешь использовать mock.patch для этого. Скажи, что хочешь проверить t_read
:
@mock.patch.object(stdin, 'fileno')
@mock.patch.object(stdin, 'read')
def test_your_behavior(self, mock_read, mock_fileno):
# this should make select.select return what you expect it to return
mock_fileno.return_value = 'your expected value'
# rest of the test goes here...
Если вы можете опубликовать хотя бы часть кода, который вы пытаетесь протестировать, я могу привести вам лучший пример.
Других решений пока нет …