728x90
반응형
source 는 Github 에 있습니다.
목차는 테스트 & 리팩토링 목차 에 있습니다.
[테스트 및 리팩토링 8편] fixture-monkey 정리
fixture-monkey
- 테스트 데이터를 만들어주는 오픈소스입니다.
- 나중에 찾아볼 용도로 정리했습니다.
source
- 자바, gradle 환경 에서 실행했습니다. (Java17)
- gradle 설정하는데 시간이 오래걸렸는데 처음에는 fixture-monkey-starter 만 설치하면 관련 plugin 은 전부 import 되는줄 알았는데, 그게 아니였습니다. 그래서 그냥 서드 파티 관련 gradle 설정을 전부 넣어버렸습니다.
- 아래 중에 필요한 서드 파티 설정만 추가하시면 될 것 같습니다.
주의사항으로는 FixtureMonkey 를 통해 데이터를 만들 때, 사용한 annotation 이 Jakarta 이면 JakartaValidationPlugin 을 써줘야 하고, Javax annotation 을 썼으면 JavaxPlugin 을 사용해야합니다.
// fixture-monkey
testImplementation('com.navercorp.fixturemonkey:fixture-monkey-starter:0.5.2')
testImplementation('com.navercorp.fixturemonkey:fixture-monkey-javax-validation:0.5.2')
testImplementation("com.navercorp.fixturemonkey:fixture-monkey-jackson:0.5.2")
testImplementation("com.navercorp.fixturemonkey:fixture-monkey-jakarta-validation:0.5.2")
testImplementation("com.navercorp.fixturemonkey:fixture-monkey-junit-jupiter:0.5.2")
testImplementation("com.navercorp.fixturemonkey:fixture-monkey-autoparams:0.5.2")
testImplementation("com.navercorp.fixturemonkey:fixture-monkey-engine:0.5.2")
@Data
public class UserInfo {
@NotNull
private Long id;
@NotBlank
private String name;
@Min(1)
@Max(150)
private int age;
}
class UserInfoTest {
@Test
void jakarataValidation_숫자_MIN_MAX_테스트() {
final FixtureMonkey fixtureMonkey = FixtureMonkey.builder()
.plugin(new JakartaValidationPlugin())
.build();
// when
final UserInfo userInfo = fixtureMonkey.giveMeOne(UserInfo.class);
// then
assertAll(
() -> assertThat(userInfo.getAge()).isBetween(1, 150)
);
}
@DisplayName("값에 대한 범위를 지정해서 테스트 할 수 있음")
@Test
void 값에_대한_범위_지정_테스트() {
final FixtureMonkey fixtureMonkey = FixtureMonkey.builder()
.plugin(new JavaxValidationPlugin())
.build();
// when
final UserInfo userInfo = fixtureMonkey.giveMeBuilder(UserInfo.class)
.set("id", Arbitraries.longs().between(1, 100))
.sample();
// then
assertThat(userInfo.getId()).isBetween(1L, 100L);
}
}
Reference
'test & refactoring' 카테고리의 다른 글
[테스트 및 리팩토링 9편] Junit5 정리 (2) | 2023.10.10 |
---|---|
[테스트 및 리팩토링 7편] TestContainer Example (0) | 2023.04.22 |
[테스트 & 리팩토링 6편] 팩토리 패턴 if else 줄이기 (map, functional interface 사용) (2) | 2022.08.01 |
[테스트 & 리팩토링 4편] github pull request template 및 CodeReview 정리 (0) | 2022.06.27 |
[테스트 & 리팩토링 3편] package layer, package import 정리 (0) | 2022.06.27 |
댓글