2013-11-13 2 views
5

У меня есть программное обеспечение, состоящее из двух половинок: один - это python, запущенный на первом компьютере, другой - cpp, работающий на втором. Они обмениваются данными через последовательный порт (tty).Протестируйте программу, которая использует tty stdin и stdout

Я хотел бы протестировать python на моем компьютере, подав ему правильные данные и посмотреть, будет ли он вести себя так, как ожидалось.

Я начал использовать подпроцесс, но затем возникла проблема: какой stdin и stdout я должен поставить?

cStringIO не работает, потому что нет fileno()

PIPE не работает либо потому, что select.select() говорит, что есть что-то читать, даже если ничего не на самом деле послал

Есть ли у вас какие-то намеки? Есть ли поддельный модуль tty, который я могу использовать?

+0

Возможно, вы можете «имитировать» их и определить «return_value». – Farhadix

+0

* "' select.select() 'говорит, что есть что прочитать, даже если ничего не отправлено" * - что возвращает 'os.read' в этом случае? Вы пробовали модули 'pexpect',' pty'? – jfs

ответ

0

В идеале вы должны издеваться над этим и просто проверять поведение, не полагаясь слишком много на клемму ввода-вывода. Вы можете использовать для этого 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... 

Если вы можете оставить по крайней мере, часть кода, который вы пытаетесь проверить, что я могу, может дать вам лучший пример.

+0

Код https://github.com/arduino/YunBridge, package.py в частности https://github.com/arduino/YunBridge/blob/master/bridge/packet.py [1] –

+0

Я обновил например, чтобы показать, что вы можете издеваться. – andersonvom

Смежные вопросы