4.1 ๋ฐฉ๋ฒ• ๋งค๊ฐœ๋ณ€์ˆ˜

๋ชจ์˜ ๊ฐœ์ฒด์— ์ถ”๊ฐ€๋œ ์ด์ „ ๊ทœ์น™์€ ๋งค๊ฐœ ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ฒ˜๋ฆฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๊ทœ์น™์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์€ ๋ฌด์—‡์ž…๋‹ˆ๊นŒ? ๋˜ํ•œ ์ผ๋ถ€ ๋งค๊ฐœ ๋ณ€์ˆ˜ ๊ฐ’์— ๋Œ€ํ•ด ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ๊ณ  ๋‹ค๋ฅธ ๊ฒฐ๊ณผ์— ๋Œ€ํ•ด ๋‹ค๋ฅธ ๊ฒฐ๊ณผ๊ฐ€ ์žˆ๋„๋ก ๊ทœ์น™์„ ๋งŒ๋“ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ์—ฌ๋Ÿฌ๋ถ„๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ๊ฐ€ ํŠน์ • ๋งค๊ฐœ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ํ•ญ๋ชฉ์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•˜๋ ค๋ฉด ๊ทœ์น™์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Mockito.doReturn(result).when(an object).method name(parameter);

๋” ์ž˜ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์˜ˆ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. List๊ฐ€ 10๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์š”์ฒญํ•  ๋•Œ Ivan์ด๋ผ๋Š” ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  500๋ฒˆ์งธ ์š”์†Œ๋ฅผ ์š”์ฒญํ•  ๋•Œ Marya๋ผ๋Š” ์ด๋ฆ„์„ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค. ๋งํ•œ ๊ฒƒ๋ณด๋‹ค ๋นจ๋ฆฌ.

@ExtendWith(MockitoExtension.class)
class ParamsTest {
    @Mock
    List mockList;

    @Test
    public void whenMockAnnotation() {
        //adding the first rule
        Mockito.doReturn("Ivan").when(mockList).get(10);
        //adding a second rule
        Mockito.doReturn("Maria").when(mockList).get(500);

        assertEquals("Ivan", mockList.get(10));
        assertEquals("Maria", mockList.get(500));

    }
}

4.2 ๋งค๊ฐœ๋ณ€์ˆ˜ ํ…œํ”Œ๋ฆฟ

๊ทธ๋ฆฌ๊ณ  ์ฆ‰์‹œ ๊ตํ™œํ•œ ๋™๋ฃŒ๊ฐ€ "๋ฉ”์„œ๋“œ์— ์ธ์ˆ˜๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ ์–ด๋–ค ๊ฐ’์— ๋Œ€ํ•ด์„œ๋„ ๋™์ผํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ?"๋ผ๋Š” ์งˆ๋ฌธ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์“ฐ์ง€ ๋ง์ž:

Mockito.doReturn("Ivan").when(mockList).get(1);
Mockito.doReturn("Ivan").when(mockList).get(2);
Mockito.doReturn("Ivan").when(mockList).get(99);

์•„๋‹ˆ์š”, ์•„๋ฌด๋„ ๋‹น์‹ ์—๊ฒŒ ๊ทธ๋ ‡๊ฒŒ ์“ฐ๋ผ๊ณ  ๊ฐ•์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ธ์ˆ˜๊ฐ€ ์žˆ๋Š” ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜๋Š” ๋ชจ์˜ ๊ฐœ์ฒด์— ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•˜๋ ค๋Š” ๊ฒฝ์šฐ ์ด๋ฅผ ์œ„ํ•œ ํŠน์ˆ˜ ๊ฐœ์ฒด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

Mockito.any()

์šฐ๋ฆฌ์˜ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑ๋ฉ๋‹ˆ๋‹ค.

Mockito.doReturn("Ivan").when(mockList).get(any(int.class));

์—ฌ๊ธฐ์—๋Š” ๋ช‡ ๊ฐ€์ง€ ๋‰˜์•™์Šค๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐœ์ฒด์—๋Š” Mockito.any()์œ ํ˜•์ด ์žˆ์œผ๋ฏ€๋กœ Object๋‹ค๋ฅธ ์œ ํ˜•์˜ ๋งค๊ฐœ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ์œ ์‚ฌ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ฐฉ๋ฒ• ๋งค๊ฐœ๋ณ€์ˆ˜ ์œ ํ˜•
1 ์–ด๋А() null์„ ํฌํ•จํ•˜๋Š” ๊ฐœ์ฒด
2 any(ํด๋ž˜์Šค๋ช….ํด๋ž˜์Šค) ํด๋ž˜์Šค ์ด๋ฆ„
์‚ผ ์ž„์˜์˜ ์ •์ˆ˜() ์ •์ˆ˜
4 ๋ชจ๋“  ๋ถ€์šธ() ๋ถ€์šธ
5 ๋ชจ๋“  ๋”๋ธ”() ๋”๋ธ”
6 ์• ๋‹ˆ๋ฆฌ์ŠคํŠธ() ๋ชฉ๋ก

๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ, ์šฐ๋ฆฌ์˜ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค:

Mockito.doReturn("Ivan").when(mockList).get(anyInt());

4.3 doAnswer() ๋ฉ”์„œ๋“œ

์šฐ๋ฆฌ๋Š” ๊ฐ€์ƒ ๋ฉ”์„œ๋“œ์˜ ๋ณต์žกํ•œ ๋™์ž‘์— ๋„๋‹ฌํ–ˆ์Šต๋‹ˆ๋‹ค. ์กฐ๋งŒ๊ฐ„ ์ด ๊ฐ€์ƒ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ณต์žกํ•œ ๋™์ž‘์„ ๊ฐ–๊ธฐ๋ฅผ ์›ํ•˜๋Š” ์ƒํ™ฉ์ด ์˜ฌ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋งค๊ฐœ ๋ณ€์ˆ˜์— ๋”ฐ๋ผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๊ณ  ๋ฌธ์ž์—ด์„ ๋Œ€๋ฌธ์ž๋กœ ๋ณ€ํ™˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•œ ํŠน๋ณ„ํ•œ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค - doAnswer(). ํ•„์š”ํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋ฉ๋‹ˆ๋‹ค.

Mockito.doAnswer(function).when(an object).method name(parameter);

get()ํด๋ž˜์Šค ๋ฉ”์„œ๋“œ๊ฐ€ List์ „๋‹ฌ๋œ ์ธ์ˆ˜์˜ ์ œ๊ณฑ์„ ๋ฐ˜ํ™˜ ํ•˜๋„๋ก ํ•ฉ์‹œ๋‹ค . ๊ทธ๋ฆฌ๊ณ  ๋‹ค์Œ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

@ExtendWith(MockitoExtension.class)
class DoAnswerTest {
    @Mock
    List mockList;

    @Test
    public void whenMockAnnotation() {
        Mockito.doAnswer(invocation -> {
            int parameter = invocation.getArgument(0);
            return parameter * parameter;
        }).when(mockList).get(anyInt());

        assertEquals(100, mockList.get(10));
        assertEquals(25, mockList.get(5));
    }
}

Answer ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ–ˆ์Šต๋‹ˆ๋‹ค.