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

Defined in:
lib/test/unit/data.rb

Defined Under Namespace

Classes: Loader

Instance Method Summary collapse

Instance Method Details

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

This method provides Data-Driven-Test functionality.

Define test data in the test code.

Overloads:

  • #data(label, data, options = {}) ⇒ Object

    Examples:

    data(label, data)

    data("empty string", [true, ""])
    data("plain string", [false, "hello"])
    def test_empty?(data)
      expected, target = data
      assert_equal(expected, target.empty?)
    end

    Parameters:

    • label (String)

      specify test case name.

    • data

      specify test data.

    • options (Hash) (defaults to: {})

      specify options.

    Options Hash (options):

    • :keep (Boolean)

      whether or not to use this data in the following test methods

  • #data(variable, patterns, options = {}) ⇒ Object

    Generates test matrix from variable and patterns pairs.

    Examples:

    data(variable, patterns)

    data(:x, [1, 2, 3])
    data(:y, ["a", "b"])
    def test_patterns(data)
      # 3 * 2 times executed
      # 3: the number of patterns of :x
      # 2: the number of patterns of :y
      p data
        # => {:x => 1, :y => "a"}
        # => {:x => 1, :y => "b"}
        # => {:x => 2, :y => "a"}
        # => {:x => 2, :y => "b"}
        # => {:x => 3, :y => "a"}
        # => {:x => 3, :y => "b"}
    end

    Parameters:

    • variable (Symbol)

      specify test pattern variable name.

    • patterns (Array)

      specify test patterns for the variable.

    • options (Hash) (defaults to: {})

      specify options.

    Options Hash (options):

    • :keep (Boolean)

      whether or not to use this data in the following test methods

    • :group (Object)

      the test pattern group. Test matrix is generated for each test pattern group separately.

  • #data(data_set, options = {}) ⇒ Object

    Examples:

    data(data_set)

    data("empty string" => [true, ""],
         "plain string" => [false, "hello"])
    def test_empty?(data)
      expected, target = data
      assert_equal(expected, target.empty?)
    end

    Parameters:

    • data_set (Hash)

      specify test data as a Hash that key is test label and value is test data.

    • options (Hash) (defaults to: {})

      specify options.

    Options Hash (options):

    • :keep (Boolean)

      whether or not to use this data in the following test methods

  • #data(options = {}, &block) ⇒ Object

    Examples:

    data(&block)

    data do
      data_set = {}
      data_set["empty string"] = [true, ""]
      data_set["plain string"] = [false, "hello"]
      data_set
    end
    def test_empty?(data)
      expected, target = data
      assert_equal(expected, target.empty?)
    end

    Parameters:

    • options (Hash) (defaults to: {})

      specify options.

    Options Hash (options):

    • :keep (Boolean)

      whether or not to use this data in the following test methods

    Yield Returns:

    • (Hash<String, Object>)

      return test data set as a Hash that key is test label and value is test data.

  • #data(options = {}, &block) ⇒ Object

    Generates test matrix from variable and patterns pairs.

    Examples:

    data(&block)

    data do
      patterns = 3.times.to_a
      [:x, patterns]
    end
    data do
      patterns = []
      character = "a"
      2.times.each do
        patterns << character
        character = character.succ
      end
      [:y, patterns]
    end
    def test_patterns(data)
      # 3 * 2 times executed
      # 3: the number of patterns of :x
      # 2: the number of patterns of :y
      p data
        # => {:x => 0, :y => "a"}
        # => {:x => 0, :y => "b"}
        # => {:x => 1, :y => "a"}
        # => {:x => 1, :y => "b"}
        # => {:x => 2, :y => "a"}
        # => {:x => 2, :y => "b"}
    end

    Parameters:

    • options (Hash) (defaults to: {})

      specify options.

    Options Hash (options):

    • :keep (Boolean)

      whether or not to use this data in the following test methods

    Yield Returns:

    • (Array<Symbol, Array>)

      return test data set as an Array of variable and patterns.



129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
# 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) ⇒ Object

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:



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

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