프로그래밍 노트/TEST를 해보자

[Fixture Monkey] 테스트 생산성 향상을 위해 Fixture Monkey를 찍먹해보자

깡냉쓰 2024. 10. 2. 16:45
728x90
반응형

Fixture Monkey?

  • The easiest way to generate controllable arbitray test objects

테스트를 수행할 때 필드가 많은 객체 생성이 필요할때가 있다.

Fixture Monkey를 사용하면 테스트 케이스에 맞는 필드값만 설정하고 나머지 필드는 임의의 값으로 생성되게하여 객체를 손쉽게 생성할 수 있다.

FixtureMonkey 생성

val fixtureMonkey = FixtureMonkey
  .plugin(KotlinPlugin())
  .build()

// fixtureMonkey로 객체를 생성하게 되면 필드 타입에 맞는 임의의값이 생성되는데
// 특정 필드 타입의 제약조건을 전역적으로 생성하고 싶다면, 아래와 같이 Cusomization Options 를 설정할 수 있다.
// https://naver.github.io/fixture-monkey/v1-0-0/docs/fixture-monkey-options/customization-options/

// String 타입에 알파벳만 1~10자로 입력 되도록
val fixtureMonkey = FixtureMonkey
            .builder()
            .plugin(KotlinPlugin())
            .plugin(
                JqwikPlugin().javaTypeArbitraryGenerator(
                    object : JavaTypeArbitraryGenerator {
                        override fun strings(): StringArbitrary =
                            Arbitraries
                                .strings()
                                .alpha()
                                .ofMinLength(1)
                                .ofMaxLength(10)
                    },
                ),
            ).build()

객체 생성

// 임의의 값으로 객체를 생성
val user: RegistrationUser = fixtureMonkey.giveMeOne()

// 특정 값을 지정 후 객체 생성
val user: RegistrationUser = fixtureMonkey
            .giveMeBuilder<RegistrationUser>()
            .setExp(RegistrationUser::name, "딩동댕")
            .sample()

// 특정 컬렉션 수를 제한해서 생성
val user: RegistrationUser = fixtureMonkey
            .giveMeBuilder<RegistrationUser>()
            .size(hobbyList, 5)
            .sample()

개발자가 일일이 필드값을 셋팅해서 생성해주지 않는 것만으로도 생산성이 올라간다.
나머지 유용한 기능을 사용할때 마다 추가해 놓자.

https://naver.github.io/fixture-monkey/v1-0-0/

728x90
반응형