Skip to content

Latest commit

Β 

History

History
102 lines (90 loc) Β· 4.67 KB

File metadata and controls

102 lines (90 loc) Β· 4.67 KB

@ParameterizedTest

κ°œμš”

  • ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜λ‹€ 보면, ν•œ 개의 λ©”μ„œλ“œμ— λŒ€ν•΄μ„œ μ—¬λŸ¬ 개의 ν…ŒμŠ€νŠΈλ₯Ό μˆ˜ν–‰ν•΄μ•Ό ν•˜λŠ” κ²½μš°κ°€ λ°œμƒν•œλ‹€.
  • κ·œμΉ™μ΄ λ§Žμ•„μ§€λŠ” κ²½μš°λ‚˜ ν…ŒμŠ€νŠΈν•˜κ³  싢은 값이 λ§Žμ€ 경우 일일이 ν…ŒμŠ€νŠΈ μ½”λ“œλ₯Ό μž‘μ„±ν•˜κΈ°μ—λŠ” νž˜λ“€ 수 μžˆλ‹€.
  • JUnitμ—μ„œλŠ” μ—¬λŸ¬ 개의 ν…ŒμŠ€νŠΈλ₯Ό ν•œ λ²ˆμ— μž‘μ„±ν•˜κΈ° μœ„ν•œ @ParameterizedTest λΌλŠ” μ–΄λ…Έν…Œμ΄μ…˜μ„ μ œκ³΅ν•œλ‹€.
    • @Test λŒ€μ‹  @ParameterizedTest μ–΄λ…Έν…Œμ΄μ…˜μ„ μ„ μ–Έν•΄μ£Όκ³ , νŒŒλΌλ―Έν„°λ‘œ λ„˜κ²¨μ€„ 값듀을 μ§€μ •ν•΄μ£Όλ©΄ λ˜λŠ”λ°, νŒŒλΌλ―Έν„°λ₯Ό λ„˜κ²¨μ£ΌλŠ” μ–΄λ…Έν…Œμ΄μ…˜μ΄ μ—¬λŸ¬ μ’…λ₯˜κ°€ μžˆλ‹€.

@ValueSource

  • ν•˜λ‚˜μ˜ ν…ŒμŠ€νŠΈμ— ν•˜λ‚˜μ˜ 인수λ₯Ό λ„˜κ²¨μ£ΌλŠ” 방법
  • ν…ŒμŠ€νŠΈμ— μ£Όμž…ν•  값을 μ–΄λ…Έν…Œμ΄μ…˜μ— λ°°μ—΄λ‘œ μ§€μ •ν•œλ‹€.
  • ν…ŒμŠ€νŠΈλ₯Ό μ‹€ν–‰ν•˜λ©΄ 배열을 μˆœνšŒν•˜λ©΄μ„œ, ν…ŒμŠ€νŠΈ λ©”μ„œλ“œμ— 인수둜 배열에 μ €μž₯된 값듀을 μ£Όμž…ν•˜μ—¬ ν…ŒμŠ€νŠΈν•œλ‹€.
  • @ValueSource에 μ‚¬μš©ν•  수 μžˆλŠ” μžλ£Œν˜•
    • byte, short, int, long, float, double, char, boolean
    • String, Class
@ParameterizedTest
@ValueSource(strings = {"", " "})
void μœ μ €λ„€μž„μœΌλ‘œ_User_μƒμ„±ν•˜κΈ°(String userName) {
    assertThatThrownBy(() -> new User(userName))
        .isInstanceOf(IllegalArgumentException.class);
}

@CsvSource

  • input κ°’κ³Ό expect (κΈ°λŒ€κ°’) 값을 인수둜 λ°›κ³  싢은 경우 μ‚¬μš©ν•œλ‹€.
  • value λ§€κ°œλ³€μˆ˜λ‘œ 값을 λ„˜κ²¨μ£ΌλŠ”λ°, 이 λ•Œ "{input},{expect}"의 ν˜•νƒœλ‘œ κ΅¬λΆ„μžκ°€ μžˆλŠ” λ¬Έμžμ—΄λ‘œ μž…λ ₯을 λ„£μ–΄μ€€λ‹€.
    • κΈ°λ³Έ κ΅¬λΆ„μžλŠ” 콀마(',')μ΄μ§€λ§Œ, delimiter 값을 직접 μ •μ˜ν•΄μ„œ μ»€μŠ€ν…€ κ΅¬λΆ„μžλ₯Ό μ‚¬μš©ν•  μˆ˜λ„ μžˆλ‹€.
    • delimiter κ΅¬λΆ„μžλŠ” String이 μ•„λ‹Œ char κ°’
    •  @CsvSource(value = {"1:2", "3:4"}, delimiter = ':')
    • String을 κ΅¬λΆ„μžλ‘œ λ„£κ³  μ‹Άλ‹€λ©΄ delimiterString λ§€κ°œλ³€μˆ˜λ₯Ό μ΄μš©ν•΄ 값을 λ„˜κ²¨μ€˜μ•Ό ν•œλ‹€.
    •  @CsvSource(value = {"1//2", "3//4"}, delimiterString = "//")
@ParameterizedTest
@CsvSource(value = {"1,2", "2,4", "3,6"})
void 2_κ³±ν•˜κΈ°_ν…ŒμŠ€νŠΈ(int input, int expected) {
    assertThat(multiplyBy2(input)).isEqualTo(expected);
}

@NullSource, @EmptySource, @NullAndEmptySource

  • @NullSourceλŠ” ν…ŒμŠ€νŠΈ 인자둜 null을, @EmptySourceλŠ” 빈 값을, @NullAndEmptySourceλŠ” nullκ³Ό 빈 값을 λͺ¨λ‘ μ£Όμž…ν•œλ‹€.
  • 이 λ•Œ μ›μ‹œ κ°’ (byte, short, int, long, float, double, char, boolean) 은 null이 λ“€μ–΄κ°ˆ 수 μ—†μœΌλ―€λ‘œ λ©”μ„œλ“œμ˜ μΈμžκ°€ μ›μ‹œ 값이라면 @NullSource, @NullAndEmptySourceλŠ” μ‚¬μš© λΆˆκ°€λŠ₯ν•˜λ‹€.
  • @NullSource와 @EmptySourceλ₯Ό λ‘˜ λ‹€ μ‚¬μš©ν•œ 것은 @NullAndEmptySource와 κ°™λ‹€.
  • @ValueSource와 같이 μ‚¬μš© κ°€λŠ₯ν•˜λ‹€.
@ParameterizedTest
@NullAndEmptySource
@ValueSource(strings = {"", " "})
void μœ μ €λ„€μž„μœΌλ‘œ_User_μƒμ„±ν•˜κΈ°(String name) {
    assertThatThrownBy(() -> new User(name))
        .isInstanceOf(IllegalArgumentException.class)
}

@EnumSource

  • Enum 클래슀의 λͺ¨λ“  값을 μ‚¬μš©ν•˜λ €λ©΄ @EnumSource μ•ˆμ— Enum 클래슀만 전달해주면 되고, νŠΉμ • κ°’λ§Œ ν•„μš”ν•  경우 value에 Enum 클래슀λ₯Ό λ„£μ–΄μ£Όκ³ , names에 선택할 κ°’μ˜ 이름을 전달해주면 λœλ‹€.
  • 이 λ•Œ namesκΉŒμ§€ 값을 λ„£μœΌλ©΄ μΆ”κ°€λ‘œ mode 값을 넣어쀄 수 μžˆλ‹€.
  • μ§€μ›ν•˜λŠ” modeλŠ” λ‹€μŒκ³Ό κ°™λ‹€.
    • INCLUDE
    • EXCLUDE
    • MATCH_ALL
    • MATCH_ANY
@ParameterizedTest
@EnumSource(value = Color.class, names = {"PINK", "CORAL"})
void μƒ‰μƒμ˜_베이슀_색상_ν…ŒμŠ€νŠΈ(Color color) {
    assertThat(color.getBaseColor()).isEqualTo(Color.RED);
}

@MethodSource

  • μœ„ μ–΄λ…Έν…Œμ΄μ…˜λ“€μ€ λ³΅μž‘ν•œ Objectλ₯Ό μ „λ‹¬ν•˜λŠ” 것은 λΆˆκ°€λŠ₯ν•˜λ‹€.
  • @MethodSourceλŠ” λ©”μ„œλ“œλ₯Ό 인수둜 전달해주면 λ³΅μž‘ν•œ 인수λ₯Ό μ „λ‹¬ν•˜λŠ” 것이 κ°€λŠ₯ν•˜λ‹€.
@ParameterizedTest
@MethodSource("provideBlankStrings")
void λ¬Έμžμ—΄_isBlank_ν…ŒμŠ€νŠΈ(String input, boolean expected) {
    assertThat(input.isBlank()).isEqualTo(expected);
}

private static Stream<Arguments> provideBlankStrings() {
    return Stream.of(
        Arguments.of("", true),
        Arguments.of(" ", true),
        Arguments.of("not blank", false)
    );
}
  • provideBlankStrings()λΌλŠ” λ©”μ„œλ“œλ₯Ό μ •μ˜ν•œ λ’€, ν•΄λ‹Ή λ©”μ„œλ“œλ₯Ό @MethodSource둜 ν…ŒμŠ€νŠΈ λ©”μ„œλ“œμ— λ„˜κ²¨μ£ΌλŠ” 방식
  • @MethodSource에 μž‘μ„±ν•˜λŠ” λ©”μ„œλ“œ 이름은 인수둜 μ œκ³΅ν•˜λ €λŠ” λ©”μ„œλ“œ 이름과 κ°™μ•„μ•Ό ν•œλ‹€.
  • 인수둜 μ „λ‹¬ν•˜λ €λŠ” λ©”μ„œλ“œλŠ” static λ©”μ„œλ“œμ—¬μ•Ό ν•œλ‹€.
  • @MethodSource에 λ©”μ„œλ“œ 이름을 μž‘μ„±ν•΄μ£Όμ§€ μ•ŠμœΌλ©΄ JUnit이 ν…ŒμŠ€νŠΈ λ©”μ„œλ“œ λ„€μž„κ³Ό 같은 λ©”μ„œλ“œλ₯Ό μ°Ύμ•„ 인수둜 μ œκ³΅ν•œλ‹€.