ruby - 使用 Ruby 进行测试驱动开发

标签 ruby unit-testing testing tdd

我是测试新手,在开始使用 TDD 方面需要一些帮助。我有一个简单的应用程序,它获取一些 txt 文件并针对不同的输出重新格式化它们。

这里是一个txt文件的例子

Smith | Steve | D | M | Red | 3-3-1985
Bonk | Radek | S | M | Green | 6-3-1978
Bouillon | Francis | G | M | Blue | 6-3-1975 

这是我在 app.rb 中更改此文本文件输出的方法

def pipe
 alpha = File.readlines('pipe.txt').sort 
 alpha.each {|line| line.gsub! '-', '/'}
 alpha.each {|line| line.gsub! '|', ''}
 alpha.each {|line| line.gsub! 'M', 'Male'}
end

def pipe_date
 alpha = File.readlines('pipe.txt')
 alpha.each {|line| line.gsub! '-', '/'}
 alpha.each {|line| line.gsub! '|', ''}
 alpha.each {|line| line.gsub! 'M', 'Male'}
 alpha.sort_by { |str| Date.strptime(str[/\d+\/\d+\/\d+/], "%d/%m/%Y") } 
end

def pipe_des
  alpha = File.readlines('pipe.txt').sort { |a,b| b <=> a }
  alpha.each {|line| line.gsub! '-', '/'}
  alpha.each {|line| line.gsub! '|', ''}
  alpha.each {|line| line.gsub! 'M', 'Male'}
end

环顾四周后,我写了一个看起来像这样的 test.rb 文件,但是当我运行 ruby test.rb 时,我得到了这个错误

MiniTest::Unit::TestCase is now Minitest::Test. From        /Users/pacloan/.rbenv/versions/2.1.2/lib/ruby/2.1.0/test/unit/testcase.rb:8:in   `<module:Unit>'
/Users/pacloan/.rbenv/versions/2.1.2/lib/ruby/2.1.0/test/unit.rb:676:in   `<class:Runner>': undefined method `_run_suite' for class `Test::Unit::Runner'   (NameError)

这是我的 test.rb 文件。我认为我的设置可能是错误的。有人可以提供一些关于我在做什么的见解吗?

require_relative "app"
require 'minitest'
require 'test/unit'
require 'minitest/autorun'
Minitest::Test

class TestApp < Test::Unit::TestCase

  def test_read_files
    #assert something
    #expected output 
  end
end 

最佳答案

您所做的一切都是正确的。

您有一些小的语法项需要修复。

当您需要测试文件时,通常只需要minitest/autorun,而不是test/unit。 (Minitest 是较新 Ruby 版本的典型代表,test/unit 是较旧 Ruby 版本的典型代表)。

您可以删除这些行:

require 'minitest'
require 'test/unit'

还有这一行:

Minitest::Test

改变这个:

class TestApp < Test::Unit::TestCase

对此:

class TestApp < Minitest::Test

这是新语法。

您可以像这样验证您的 Ruby 是最新的(版本 2.2.x):

$ ruby -v
ruby 2.2.0p0 (2014-12-25 revision 49005) [x86_64-darwin14]

您可以像这样验证您的 minitest gem 是最新的(版本 5.5.x):

$ gem list minitest
minitest (5.5.1)

请注意,许多现有的测试教程显示的是旧语法。如果您尝试在较新的系统上运行较旧的语法,您可能会看到警告和错误,例如“TestCase is now Test”或“MiniTest now Minitest”。

关于ruby - 使用 Ruby 进行测试驱动开发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28002495/

相关文章:

testing - 模拟 Grails Spring Security 登录用户

java - JUnit 4 : Nested tests

javascript - Python 类 JavaScript 中的函数模拟

没有 `each` 的 ruby 哈希迭代

ruby - 使用 ruby​​ 从网站检索文档

php - 您将如何测试一个可以向查询添加数十个不同过滤器的类?

unit-testing - App Engine 本地单元测试不同实例 [GO]

PHPUnit数据库测试异常

android - Calabash Android 脚本停止

jquery - 从 Rails 的下拉菜单中选择项目后如何更新数据库字段?