测试使用tty stdin和stdout的程序

时间:2013-11-13 16:50:09

标签: c++ python stdout stdin tty

我有一个由两部分组成的软件:一部分是在第一台PC上运行的python,另一部分是在第二部分上运行的cpp。 它们通过串口(tty)进行通信。

我想在我的电脑上测试python端,用适当的数据提供它,看它是否按预期运行。

我开始使用子进程但后来出现了问题:我应该提供哪个stdin和stdout?

cStringIO不起作用,因为没有fileno()

PIPE无法正常工作,因为select.select()表示即使实际上没有发送任何内容也有需要阅读的内容

你有任何提示吗?我可以使用假的tty模块吗?

1 个答案:

答案 0 :(得分:0)

理想情况下,你应该嘲笑它并测试行为,而不要过多地依赖终端IO。您可以使用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...

如果您可以发布至少部分您要测试的代码,我可以给您一个更好的例子。