Help us understand the problem. What is going on with this article?

java用PropertyBaseTestingツールEasyRamdomを試す

More than 1 year has passed since last update.

EasyRamdomはJavaのインスタンスをランダムに作ってくれるツール。Property Base Testingツールの一種です。

https://github.com/j-easy/easy-random

特徴はこんな感じ
- getter/setter/デフォルトコンストラクタがなくても生成可能(自分はgroovyのspockで試しました。spockでは不要でした。JUnitとかだと試していないです。念の為。)
- 型に合わせてデータを作ってくれる
- 複雑な型もOK
- とにかくシンプル
- 生成方法は柔軟に変更可能
- EnumはEnumの値からランダムで選択してくれる
- BeanValidationと併用するとValidationの制限値内でデータを作ってくれる

結構自分的には理想的なツールです。

dependenciesは一つだけ。
BeanValidationを使用する場合はeasy-random-bean-validationも。

dependencies{
    testCompile "org.jeasy:easy-random-core:4.0.0.RC1"
    testCompile "org.jeasy:easy-random-bean-validation:4.0.0.RC1"
}

基本

EasyRandom easyRandom = new EasyRandom()
Quantity quantity = easyRandom.nextObject(Quantity.class)

これだけでQuantityオブジェクトが生成されます。
Quantityの中身がどうあれ型に合わせて作ってくれます。

seedは固定のようなので基本毎回同じ値を返してします。なので、seedを指定することをおすすめします。

EasyRandomParameters parameters = new EasyRandomParameters().seed(System.currentTimeMillis())
EasyRandom easyRandom = new EasyRandom(parameters)
Quantity quantity = easyRandom.nextObject(Quantity.class)

生成方法を変更する

Randomizerを作成すると自由に生成方法を変更できます。以下の例は(令和!?)1〜1000の範囲内で生成するようにしています。

EasyRamdomでbuildinのRandomizerもあって、名前や郵便番号などを生成してくれるものらしいです。内部でfakerというツールを使用しているみたいです。
Localeも指定できるようなので、日本語の名前や住所なんかも生成できそう。まだ試してないけど。
使用にはeasy-random-randomizersをdependenciseに追加する必要があります。

QuantityRandmizer.java
public class QuantityRandmizer implements Randomizer<Integer>
{
    @Override
    public Integer getRandomValue()
    {
        return ThreadLocalRandom.current().nextInt(1, 1000 + 1);
    }
}
EasyRandomParameters parameters = new EasyRandomParameters().seed(System.currentTimeMillis())
                .randomize(FieldPredicates.named("value")
                .and(FieldPredicates.ofType(Integer.class))
                .and(FieldPredicates.inClass(Quantity.class)), new QuantityRandmizer())

EasyRandom easyRandom = new EasyRandom(parameters)
Quantity quantity = easyRandom.nextObject(Quantity.class)

BeanValidationとともに使用

BeanValidationの範囲内で生成することもできます。
以下の例では、100から1000の範囲内で生成されます。

Quantity.java
public class Quantity
{
    @Min(100)
    @Max(1000)
    Integer value;

    public Quantity(Integer value)
    {
        this.value = value;
    }
}
EasyRandomParameters parameters = new EasyRandomParameters().seed(System.currentTimeMillis())
EasyRandom easyRandom = new EasyRandom(parameters)
Quantity quantity = easyRandom.nextObject(Quantity.class)

素晴らしい!

zozotech
70億人のファッションを技術の力で変えていく
https://tech.zozo.com/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした