123456789_123456789_123456789_123456789_123456789_

Module: Test::Unit::Data::ClassMethods

Relationships & Source Files
Namespace Children
Classes:
Defined in: lib/test/unit/data.rb

Instance Method Summary

Instance Method Details

#data(label, data, options = {}) #data(variable, patterns, options = {}) #data(data_set, options = {}) #data(options = {}, &block) #data(options = {}, &block)

This method provides Data-Driven-Test functionality.

Define test data in the test code.

[ GitHub ]

  
# File 'lib/test/unit/data.rb', line 129

def data(*arguments, &block)
  options = nil
  n_arguments = arguments.size
  case n_arguments
  when 0
    raise ArgumentError, "no block is given" unless block_given?
    data_set = block
  when 1
    if block_given?
      data_set = block
      options = arguments[0]
    else
      data_set = arguments[0]
    end
  when 2
    case arguments[0]
    when String
      data_set = {arguments[0] => arguments[1]}
    when Hash
      data_set = arguments[0]
      options = arguments[1]
    else
      variable = arguments[0]
      patterns = arguments[1]
      data_set = [variable, patterns]
    end
  when 3
    case arguments[0]
    when String
      data_set = {arguments[0] => arguments[1]}
      options = arguments[2]
    else
      variable = arguments[0]
      patterns = arguments[1]
      data_set = [variable, patterns]
      options = arguments[2]
    end
  else
    message = "wrong number arguments(#{n_arguments} for 0..3)"
    raise ArgumentError, message
  end
  options ||= {}
  data_sets = current_attribute(:data)[:value] || DataSets.new
  data_sets.add(data_set, options)
  if options[:keep] or data_sets.have_keep?
    keep_hook = lambda do |attr|
      attr.merge(value: attr[:value].keep)
    end
    options = options.merge(keep: true, keep_hook: keep_hook)
  end
  attribute(:data, data_sets, options)
end

#load_data(file_name)

This method provides Data-Driven-Test functionality.

Load test data from the file. This is shorthand to load test data from file. If you want to load complex file, you can use #data with block.

Examples:

Load data from CSV file

load_data("/path/to/test-data.csv")
def test_empty?(data)
  assert_equal(data["expected"], data["target"].empty?)
end

Parameters:

  • file_name (String)

    full path to test data file. File format is automatically detected from filename extension.

Raises:

  • (ArgumentError)

    if file_name is not supported file format.

See Also:

[ GitHub ]

  
# File 'lib/test/unit/data.rb', line 199

def load_data(file_name)
  loader = Loader.new(self)
  loader.load(file_name)
end