Skip to main content

dynamic_test_generation

🔄 Dynamic Test Generation via Metaprogramming​

For data-driven scenarios, generate tests at runtime using define_method. This approach reduces duplication and lets you loop over complex datasets or introspect code.

# test/models/user_test.rb
require 'test_helper'

USER_FIXTURES = {
valid: { name: 'Alice', email: 'alice@example.com' },
missing_email: { name: 'Bob', email: nil }
}

class UserTest < ActiveSupport::TestCase
USER_FIXTURES.each do |key, attrs|
define_method("test_#{key}_validation") do
user = User.new(attrs)
expected = key == :valid
assert_equal expected, user.valid?, "Expected #{key} to #{expected ? 'pass' : 'fail'} validation"
end
end
end