了解如何测试 Highline 的最佳方法是查看作者如何测试他的包。
class TestHighLine < Test::Unit::TestCase
def setup
@input = StringIO.new
@output = StringIO.new
@terminal = HighLine.new(@input, @output)..
end
..
def test_agree
@input << "y\nyes\nYES\nHell no!\nNo\n"
@input.rewind
assert_equal(true, @terminal.agree("Yes or no? "))
assert_equal(true, @terminal.agree("Yes or no? "))
assert_equal(true, @terminal.agree("Yes or no? "))
assert_equal(false, @terminal.agree("Yes or no? "))
....
@input.truncate(@input.rewind)
@input << "yellow"
@input.rewind
assert_equal(true, @terminal.agree("Yes or no? ", :getc))
end
def test_ask
name = "James Edward Gray II"
@input << name << "\n"
@input.rewind
assert_equal(name, @terminal.ask("What is your name? "))
....
assert_raise(EOFError) { @terminal.ask("Any input left? ") }
end
等等,如他的代码所示。您可以在highline 源代码中找到此信息,密切关注我在链接中突出显示的设置。
请注意他是如何使用 STDIN IO 管道来代替在键盘上键入键的。
实际上,这表明您不需要使用highline
来测试那种东西。他的测试中的设置在这里真的很关键。随着他的使用 StringIO
作为一个对象。