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.)
                                
                                
                                우수한 개발자 콘텐츠 발견에 전념
                                (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.)