10

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

我想在我的电脑上测试 python 端,用正确的数据输入它,看看它是否按预期运行。

我开始使用子进程,但随后出现了问题:我应该提供哪个标准输入和标准输出?

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

PIPE 也不起作用,因为select.select()它说即使没有实际发送,也有一些东西要读取

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

4

1 回答 1

2

理想情况下,您应该模拟它并仅测试行为,而不要过多地依赖终端 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...

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

于 2013-11-14T00:13:45.090 回答