2.1 @Mock ์ฃผ์„

Mockito์—์„œ ๋ชฉ ๊ฐ์ฒด๋กœ ์ž‘์—…ํ•˜๋Š” ๋ฐฉ๋ฒ•์—๋Š” ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋Š” ์™„์ „ํ•œ ๊ฐ€์ƒ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๊ณ  ๋‘ ๋ฒˆ์งธ๋Š” ๊ธฐ์กด ๊ฐœ์ฒด๋ฅผ ๋ž˜ํผ๋กœ ๋ž˜ํ•‘ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์™„์ „ํ•œ ๊ฐ€์ƒ ๊ฐœ์ฒด๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ClassName variable name = Mockito.mock(ClassName.class);

์˜ˆ๋ฅผ ๋“ค์–ด ๋ชจ์˜ ArrayList ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

@ExtendWith(MockitoExtension.class)
class MockTest {
    @Test
    public void whenNotUseMockAnnotation_thenCorrect() {
        List mockList = Mockito.mock(ArrayList.class);
        //these methods won't do anything - they are stubs
        mockList.add("one");
        mockList.add("two");
    }
}

์ด ์˜ˆ์ œ์—์„œ๋Š” ๊ฐ€์งœ ArrayList๋ฅผ ๋งŒ๋“ค๊ณ  mockList ๋ณ€์ˆ˜์— ์ฐธ์กฐ๋ฅผ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฐœ์ฒด์˜ ๋ฉ”์„œ๋“œ๋Š” ์•„๋ฌด ์ž‘์—…๋„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๊ทธ๊ฑด ๊ทธ๋ ‡๊ณ , ์ด ์ฝ”๋“œ๋Š” ์ด๊ฒƒ์— ๋Œ€ํ•œ ํŠน๋ณ„ํ•œ ์ฃผ์„์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ์งง๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค @Mock.

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

    @Test
    public void whenNotUseMockAnnotation_thenCorrect() {
        //these methods won't do anything - they are stubs
        mockList.add("one");
        mockList.add("two");
    }
}

๋‘ ๋ฒˆ์งธ ๊ฒฝ์šฐ์—๋Š” MockitoExtensionํด๋ž˜์Šค ์ฝ”๋“œ ์ž์ฒด๋ฅผ ๋ถ„์„ํ•˜๊ณ  ํ•„์š”ํ•œ ์Šคํ…์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค Mockito.mock(). ํ•˜๋‚˜์˜ ์ฃผ์„๊ณผ ๊ฐ€์ƒ ๊ฐœ์ฒด๊ฐ€ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์•„๋ฆ„๋‹ค์›€.

2.2 @Spy ์ฃผ์„

Mockito์—์„œ ๋‘ ๋ฒˆ์งธ๋กœ ์ค‘์š”ํ•œ ๊ฐ์ฒด ์œ ํ˜•์€ ๊ธฐ์กด ๊ฐ์ฒด์— ๋Œ€ํ•œ ๋ž˜ํผ์ž…๋‹ˆ๋‹ค. ํ•œํŽธ์œผ๋กœ๋Š” ๊ธฐ์กด ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  ๋‹ค๋ฅธ ํ•œํŽธ์œผ๋กœ๋Š” ์ด๋Ÿฌํ•œ ๊ฐœ์ฒด์˜ ๋ชจ๋“  ๋ฉ”์„œ๋“œ ๋ฐ ๋ณ€์ˆ˜์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ๊ฐ€๋กœ์ฑ„์„œ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์ž‘์—…์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Mock ๊ฐ์ฒด๋งŒํผ ์ž์ฃผ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

๊ฐœ์ฒด์— ๋Œ€ํ•œ ๋ž˜ํผ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ClassName variable name = Mockito.spy(an object);

ArrayList ํด๋ž˜์Šค ์ฃผ์œ„์— ๋ž˜ํผ๊ฐ€ ์žˆ๋Š” ์˜ˆ:

@ExtendWith(MockitoExtension.class)
class SpyTest {
    @Test
    public void whenMockAnnotation() {
        List<String> mockList = Mockito.spy(new ArrayList<String>());
        //these methods will work!
        mockList.add("one");
        mockList.add("two");
    }
}

๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ํ˜•ํƒœ๋กœ ๋ž˜ํผ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ํ˜ธ์ถœ์€ ์›๋ž˜ ๊ฐœ์ฒด์— ๋Œ€ํ•œ ํ˜ธ์ถœ์„ ๋ฆฌ๋””๋ ‰์…˜ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ์ฐธ์กฐ๋Š” ๋‚ด๋ถ€์— ์œ ์ง€๋ฉ๋‹ˆ๋‹ค . ๋ชจ๋“  ๊ฒƒ์ด ์›๋ณธ ๊ฐ์ฒด์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

- ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ž˜ํผ๋ฅผ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค @Spy.

@ExtendWith(MockitoExtension.class)
class SpyTest {
    @Spy
    List mockList = new ArrayList<String>();

    @Test
    public void whenMockAnnotation() {
        // these methods will work!
        mockList.add("one");
        mockList.add("two");
    }
}

์ด ๋‘ ์ฝ”๋“œ ์˜ˆ์ œ๋Š” ๋™์ผํ•ฉ๋‹ˆ๋‹ค.