ruby - 在 Ruby 中测试整个脚本

标签 ruby testing

测试整个脚本的最佳方法是什么?我想测试脚本是否返回(打印)正确的结果。到目前为止,我所拥有的是另一个脚本,或多或少只是:

#test.rb

expected = 'test'
output = `script.rb --many params`
if output != expected
  puts "Error"
end

在这个例子中,我要测试的脚本叫做script.rb。 干杯。

最佳答案

使用 test-unit 你最终得到这样的代码:

class TestScript < Test::Unit::TestCase
  def test_output
    assert_equal 'test', `script --options`
  end
end

您可能想要使用 open3处理程序输出时的库,因为它可以让您更好地控制它的处理方式。您也可以为此编写自己的包装器,例如 assert_output_equal:

def assert_output_equal(output, command, message = nil, &block)
  Open3.popen3(command) do |stdin, stdout, stderr, wait_thr|
    assert_equal output, stdout.read, message, &block
  end
end

您可以添加它来测试您的进程的状态,确保它成功,并且没有任何关于 STDERR 等的输出。

当谈到测试产生大量文本输出的东西时(例如 JSON 数据、格式化列表),我发现最好在 test/expect 之类的地方创建文件并将文件与输出而不是定义源中的文本。这使得首先创建文件变得容易:

old_script > test/expected/old_script.default
old_script --option > test/expected/old_script.with-option

当需要调整某些内容时,它还使您的版本控制差异更易于阅读。

关于ruby - 在 Ruby 中测试整个脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40364683/

相关文章:

css - 如何使用条件来减少对象的边距

Ruby 一部分一部分地消费数组

testing - 是否有可能以某种方式在 Jenkins 的 TestLink 中自动创建作业?

java - 在没有 App/Web 服务器的情况下呈现 JSP 页面的简便方法是什么

haskell - Haskell 中的 EAN13 条码编码 : How to test it?

ruby - 通过继承的 Rspec 常量

ruby - 如何在使用 each_char 时跟踪迭代次数?

sql - postgresql:选择所有关联记录都匹配条件的记录

performance - 如何在家做软件性能测试

testing - 编译器代码生成器验证