Java로 Property-Based testing 그 1 [JPopulator + Junit]
하루 늦어서 죄송합니다.
소개
요 전날 랜덤 데이터를 만들어 테스트하고 싶은 경우가 있어 랜덤 데이터 생성이나 Property-based testing의 라이브러리를 찾았습니다.
거기서 찾아낸 jPopulator가 간단하게 사용할 수 있어 편리할 것 같았기 때문에 소개하려고 생각합니다.
사용법
우선 가장 간단한 사용법입니다.
Populator generator = new PopulatorBuilder().build();
generator.populateBean(Person.class);
populateBean 메소드의 인수에 지정된 클래스의 데이터를 자동으로 생성할 수 있습니다.
다른 프레임워크에 의존하지 않고, 단지 이것만의 설명으로 랜덤 데이터를 생성할 수 있습니다.
또, 필드에 클래스가 있는 경우도 자동적으로 그 클래스내의 필드도 랜덤 데이터로 메워 줍니다.
평상시 테스트할 때, 사실은 가능한 한 현실에서 사용되는 데이터에 가까운 데이터를 준비하고 싶은데, 필요 최소한으로 끝나는 것이 많을까 생각합니다.
간단하게 기술할 수 있으므로, 테스트의 시인성을 낮추지 않고, 중요도가 낮다고 생각하고 있는 필드에도 우선 값을 채워 둔다고 할 수 있습니다.
생성 데이터 제어
생성 데이터를 조정할 수도 있습니다.
필드를 제외하고 생성
generator.populateBean(Person.class, "age");
지정된 수의 인스턴스를 함께 작성
generator.populateBeans(Person.class, 100);
무작위 수의 인스턴스를 함께 생성
generator.populateBeans(Person.class);
생성되는 데이터의 변형을 변경합니다.
Randomizer 인터페이스를 구현함으로써 생성 데이터의 내용도 자유롭게 커스터마이즈 할 수 있습니다.
public class AgeRandomizer implements Randomizer<Integer> {
@Override
public Integer getRandomValue() {
return ((Double) (Math.random() * 50)).intValue();
}
}
Randomizer는 SAM Type이지만 물론 람다 식으로 쓸 수 있습니다.
Populator generator = new PopulatorBuilder()
.registerRandomizer(Person.class, Integer.class, "age", () -> ((Double) (Math.random() * 50)).intValue())
.build();
}
기성의 Randomizer도 몇 가지 준비되어 있으므로 편리하게 사용할 수 있다고 생각합니다.
기성의 Randomizer
Randomizer의 사용 예
Populator generator = new PopulatorBuilder()
.registerRandomizer(Person.class, String.class, "name", new FirstNameRandomizer())
.build();
마지막으로 테스트에 대한 응용 예로서 JUnit의 DataPoints를 이용하여 테스트를위한 랜덤 데이터를 생성하는 코드를 소개합니다.
import org.junit.contrib.theories.DataPoints;
import org.junit.contrib.theories.Theories;
import org.junit.contrib.theories.Theory;
import org.junit.runner.RunWith;
import io.github.benas.jpopulator.api.Populator;
import io.github.benas.jpopulator.impl.PopulatorBuilder;
import io.github.benas.jpopulator.randomizers.CityRandomizer;
import io.github.benas.jpopulator.randomizers.FirstNameRandomizer;
@RunWith(Theories.class)
public class UseJpopulator {
@DataPoints
public static Person[] getParameters() {
Populator generator =
new PopulatorBuilder()
.registerRandomizer(Person.class, String.class, "name", new FirstNameRandomizer())
.registerRandomizer(Person.class, Integer.class, "age", () -> ((Double) (Math.random() * 50)).intValue())
.registerRandomizer(Address.class, String.class, "city", new CityRandomizer())
.build();
return generator.populateBeans(Person.class, 100).toArray(new Person[0]);
}
@Theory
public void XXX(Person p) {
// TODO some tests
}
}
생성 결과
오늘은 이상입니다.
다음은 Junit-Quickcheck에 대해 쓸 것입니다.
Reference
이 문제에 관하여(Java로 Property-Based testing 그 1 [JPopulator + Junit]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/cactaceae/items/0eba51665d4a52e5b952
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
우선 가장 간단한 사용법입니다.
Populator generator = new PopulatorBuilder().build();
generator.populateBean(Person.class);
populateBean 메소드의 인수에 지정된 클래스의 데이터를 자동으로 생성할 수 있습니다.
다른 프레임워크에 의존하지 않고, 단지 이것만의 설명으로 랜덤 데이터를 생성할 수 있습니다.
또, 필드에 클래스가 있는 경우도 자동적으로 그 클래스내의 필드도 랜덤 데이터로 메워 줍니다.
평상시 테스트할 때, 사실은 가능한 한 현실에서 사용되는 데이터에 가까운 데이터를 준비하고 싶은데, 필요 최소한으로 끝나는 것이 많을까 생각합니다.
간단하게 기술할 수 있으므로, 테스트의 시인성을 낮추지 않고, 중요도가 낮다고 생각하고 있는 필드에도 우선 값을 채워 둔다고 할 수 있습니다.
생성 데이터 제어
생성 데이터를 조정할 수도 있습니다.
필드를 제외하고 생성
generator.populateBean(Person.class, "age");
지정된 수의 인스턴스를 함께 작성
generator.populateBeans(Person.class, 100);
무작위 수의 인스턴스를 함께 생성
generator.populateBeans(Person.class);
생성되는 데이터의 변형을 변경합니다.
Randomizer 인터페이스를 구현함으로써 생성 데이터의 내용도 자유롭게 커스터마이즈 할 수 있습니다.
public class AgeRandomizer implements Randomizer<Integer> {
@Override
public Integer getRandomValue() {
return ((Double) (Math.random() * 50)).intValue();
}
}
Randomizer는 SAM Type이지만 물론 람다 식으로 쓸 수 있습니다.
Populator generator = new PopulatorBuilder()
.registerRandomizer(Person.class, Integer.class, "age", () -> ((Double) (Math.random() * 50)).intValue())
.build();
}
기성의 Randomizer도 몇 가지 준비되어 있으므로 편리하게 사용할 수 있다고 생각합니다.
기성의 Randomizer
Randomizer의 사용 예
Populator generator = new PopulatorBuilder()
.registerRandomizer(Person.class, String.class, "name", new FirstNameRandomizer())
.build();
마지막으로 테스트에 대한 응용 예로서 JUnit의 DataPoints를 이용하여 테스트를위한 랜덤 데이터를 생성하는 코드를 소개합니다.
import org.junit.contrib.theories.DataPoints;
import org.junit.contrib.theories.Theories;
import org.junit.contrib.theories.Theory;
import org.junit.runner.RunWith;
import io.github.benas.jpopulator.api.Populator;
import io.github.benas.jpopulator.impl.PopulatorBuilder;
import io.github.benas.jpopulator.randomizers.CityRandomizer;
import io.github.benas.jpopulator.randomizers.FirstNameRandomizer;
@RunWith(Theories.class)
public class UseJpopulator {
@DataPoints
public static Person[] getParameters() {
Populator generator =
new PopulatorBuilder()
.registerRandomizer(Person.class, String.class, "name", new FirstNameRandomizer())
.registerRandomizer(Person.class, Integer.class, "age", () -> ((Double) (Math.random() * 50)).intValue())
.registerRandomizer(Address.class, String.class, "city", new CityRandomizer())
.build();
return generator.populateBeans(Person.class, 100).toArray(new Person[0]);
}
@Theory
public void XXX(Person p) {
// TODO some tests
}
}
생성 결과
오늘은 이상입니다.
다음은 Junit-Quickcheck에 대해 쓸 것입니다.
Reference
이 문제에 관하여(Java로 Property-Based testing 그 1 [JPopulator + Junit]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/cactaceae/items/0eba51665d4a52e5b952텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)