Rubyの property-based testing 向けライブラリの rantly gem で
ランダムなテストデータを大量に作成します。
関連記事
サンプル
require "rantly"
require "pp"
module Languages
NAMES = %w(c Java Ruby Perl PHP Python Scala Brainfuck)
end
Programmer = Struct.new("Programmer", :name, :age, :languages, :love_programming, :love_numbers)
def generate_programmer
name = Rantly{choose('tanaka', 'suzuki', 'sato', 'honda', 'noda')}
age = Rantly{range(10, 80)}
languages = ::Languages::NAMES.sample(rand(4))
love_programming = Rantly{boolean}
love_numbers = Rantly{array(5){range(1, 100)}}
Programmer.new(name, age, languages, love_programming, love_numbers)
end
# ループ数を大きくすればもっと大量のデータを生成できます
10.times {
programmer = generate_programmer
pp programmer
}
- 出力
#<struct Struct::Programmer
name="tanaka",
age=54,
languages=[],
love_programming=false,
love_numbers=[45, 57, 42, 35, 99]>
#<struct Struct::Programmer
name="noda",
age=11,
languages=["PHP", "Perl", "Brainfuck"],
love_programming=false,
love_numbers=[79, 62, 93, 17, 33]>
#<struct Struct::Programmer
name="sato",
age=55,
languages=["Ruby"],
love_programming=true,
love_numbers=[2, 17, 43, 89, 78]>
#<struct Struct::Programmer
name="honda",
age=39,
languages=["Scala", "Java", "PHP"],
love_programming=true,
love_numbers=[97, 62, 19, 86, 57]>
#<struct Struct::Programmer
name="sato",
age=55,
languages=[],
love_programming=true,
love_numbers=[87, 19, 24, 35, 24]>
#<struct Struct::Programmer
name="noda",
age=54,
languages=[],
love_programming=true,
love_numbers=[60, 11, 40, 46, 19]>
#<struct Struct::Programmer
name="tanaka",
age=78,
languages=["Brainfuck"],
love_programming=false,
love_numbers=[55, 5, 42, 71, 52]>
#<struct Struct::Programmer
name="honda",
age=49,
languages=["Java"],
love_programming=true,
love_numbers=[81, 10, 22, 95, 58]>
#<struct Struct::Programmer
name="tanaka",
age=47,
languages=[],
love_programming=false,
love_numbers=[84, 88, 49, 19, 33]>
#<struct Struct::Programmer
name="tanaka",
age=13,
languages=["Ruby", "c"],
love_programming=false,
love_numbers=[44, 50, 47, 58, 11]>