표현식

Fixture Monkey를 사용할 때, Fixture Monkey 표현식을 사용하여 오브젝트의 프로퍼티를 하나 이상 유연하게 선택할 수 있습니다.

아래와 같은 예제 오브젝트가 있다고 가정해보겠습니다.

@Value
public class JavaClass {
    String field;

    String[] array;

    List<String> list;

    Nested object;

    List<Nested> objectList;

    @Value
    public static class Nested {
        String nestedField;
    }
}

String Expressions을 통해 프로퍼티 선택하기

root object 선택:
"$"
특정 필드 선택:
"field"
nested 필드 선택:
"object.nestedField"
컬렉션의 n번째 요소 선택
"list[n]"
컬렉션의 모든 요소 선택
"list[*]"
배열의 n번째 요소 선택:
"array[n]"
배열의 모든 요소 선택:
"array[*]"
표현식을 결합하여 nested 필드 선택:
"objectList[0].nestedField"

JavaGetter Selector를 통해 프로퍼티 선택하기

javaGetter() property selector를 사용하여 type-safe하게 프로퍼티를 선택할 수 있습니다. 이 selector는 Java의 getter 메서드 참조를 통해 프로퍼티를 선택하고 표시하도록 설계되었습니다.

root object 선택:
  • 현재는 지원하지 않습니다.
특정 필드 선택:
javaGetter(JavaClass::getField)
nested 필드 선택:
javaGetter(JavaClass::getObject).into(Nested::getNestedField)
컬렉션의 n번째 요소 선택:
javaGetter(JavaClass::getList).index(String.class, n)
컬렉션의 모든 요소 선택:
javaGetter(JavaClass::getList).allIndex(String.class)
배열의 n번째 요소 선택:
javaGetter(JavaClass::getArray).index(String.class, n)
배열의 모든 요소 선택:
javaGetter(JavaClass::getArray).allIndex(String.class)
표현식을 결합하여 nested 필드 선택:
javaGetter(JavaClass::getObjectList)
    .index(Nested.class, 0)
    .into(Nested::getNestedField)

컬렉션 선택하기

컬렉션의 경우 프로퍼티는 컬렉션 크기 내에 존재하는 경우에만 선택됩니다. 예를 들어, 리스트의 크기가 2이지만 표현식이 목록의 범위를 벗어난 "list[3]"을 참조하는 경우 선택되지 않습니다.

Fixture Monkey 표현식은 리스트와 세트에서 요소를 선택하는 기능을 지원하지만, 맵의 요소를 직접 선택할 수는 없습니다. 대신, 맵을 커스터마이징해야 하는 경우에는 InnerSpec을 사용할 수 있습니다.

Expression Strict Mode

옵션을 켜면 적용된 표현식이 구조와 정확하게 일치하는지 확인할 수 있습니다. 표현식의 일부가 범위를 벗어나거나 유효하지 않은 경우 Fixture Monkey는 예외를 발생시킵니다.

Kotlin EXP

Kotlin 플러그인을 추가하면 Kotlin의 프로퍼티 참조 구문을 사용하여 프로퍼티를 선택할 수 있습니다. Fixture Monkey에서는 이 기능을 Kotlin EXP 또는 Fixture Monkey Kotlin DSL이라고 합니다. 사용법에 대한 자세한 내용은 Kotlin DSL Exp를 참조하세요.