我可以使用 RSpec 模拟 stdin/stdout 来测试控制台读取和读取吗?写道?

发布于 2024-11-15 09:12:45 字数 341 浏览 0 评论 0原文

我的 Ruby 程序从 stdin 读取行并使用 puts 打印到 stdout (终端)。我可以使用RSpec来测试读写吗?我可以像在 stdin 中编写的那样将字符串注入到我的程序中,同时检查输出吗?

line = STDIN.read.chomp.split

另外,我在循环中进行读取和写入,直到“line[0]”“退出”。我可以在循环运行时进行测试还是应该调用 subject.read_insubject.write_out

My Ruby program reads lines from stdin and uses puts to print to stdout (the terminal). Can I use RSpec to test the reads and writes? Can I inject a string to my program like it was written in stdin and at the same time check the output?

line = STDIN.read.chomp.split

Also, I have the reads and writes in a loop, until line[0] is "quit". Can I test while the loop is running or should I call subject.read_in and subject.write_out?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

陪你搞怪i 2024-11-22 09:12:45

您可以使用模拟并通过在 and_return() 方法中列出多个值来多次调用该方法。这些将按照给定的顺序返回,每次调用时返回一个。

STDIN.should_receive(:read).and_return("Your string")

STDIN.should_receive(:read).and_return("value1", "value2", "value3")

您可以使用 STDOUT 执行类似的操作:

STDOUT.should_receive(:puts).with("string")

有关详细信息,请参阅 RSpec 模拟文档

You can use mocks and have the method called more than once by listing multiple values in the and_return() method. These will be returned, one on each call, in the order given.

STDIN.should_receive(:read).and_return("Your string")

STDIN.should_receive(:read).and_return("value1", "value2", "value3")

You can do similar things with STDOUT:

STDOUT.should_receive(:puts).with("string")

See the RSpec mocking documentation for more information.

孤檠 2024-11-22 09:12:45

RSpec 3.0+

使用 RSpec 3.0,有

expect { my_method }.to output("my message").to_stdout
expect { my_method }.to output("my error").to_stderr

RSpec 3.0+

With RSpec 3.0, there is output matcher for this purpose:

expect { my_method }.to output("my message").to_stdout
expect { my_method }.to output("my error").to_stderr
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文