Ruby minitest assert_output 语法

标签 ruby unit-testing minitest assertions

我是 minitest 的新手,也是 ruby​​ 的新手,我真的厌倦了用谷歌搜索这个问题却没有结果。非常感谢您的帮助:

ruby minitest 中 assert_output 的确切语法是什么?

我在 github 或其他地方找到的所有内容似乎都使用括号。然而,当我不使用带有 assert_output 的 block 时,我收到一条错误消息,这是有道理的,因为此方法的定义包含 yield 语句。

但无论我怎样尝试,我都无法让它发挥作用。

测试类.rb

class TestClass
  def output
    puts 'hey'
  end
end

测试测试.rb

require 'minitest/spec'
require 'minitest/autorun'
require_relative 'testclass'


class TestTestClass < MiniTest::Unit::TestCase 
  def setup
    @test = TestClass.new
  end

  def output_produces_output
    assert_output( stdout = 'hey' ) { @test.output}
  end   
end 

我得到的是:

在 0.000000 秒内完成测试,NaN 测试/秒,NaN 断言

0 次测试,0 次断言,0 次失败,0 次错误,0 次跳过

我做错了什么? 这一定是非常明显的事情,但我无法弄清楚。 谢谢你的帮助。

最佳答案

为了让您的测试方法运行,方法名称需要以test_ 开头。还有,顺便assert_output有效的是该 block 将写入 stdout/stderr,如果参数与 stdout/stderr 匹配,将检查参数。检查此 IMO 的最简单方法是传入正则表达式。所以这就是我编写该测试的方式:

class TestTestClass < MiniTest::Unit::TestCase 
  def setup
    @test = TestClass.new
  end

  def test_output_produces_output
    assert_output(/hey/) { @test.output}
  end   
end 

关于Ruby minitest assert_output 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26854048/

相关文章:

c# - 在 Visual Studio 2012 中按类名对单元测试进行分组(更新 1)

ruby-on-rails - 从 IDE 运行 rake 任务时出错

ruby - 生成所有字母和数字的数组

unit-testing - 在不加载全局和用户配置的情况下调用 Mercurial

ruby - Ruby Minitest 框架的前/后方法

ruby-on-rails - Ruby on Rails : how to find the slowest tests?

ruby-on-rails - 如何将 gem 'minitest' 添加到我的测试助手?

html - 如何在不调用 "next_element"方法的情况下使用 Nokogiri 选择下一个元素?

ruby - 在 Ruby 中如何检测文件是否可写?

unit-testing - 如何在真实项目中的 Microsoft Dynamics AX 2012 中进行单元测试