테스트 클래스 구조

import static org.junit.jupiter.api.Assertions.*;
import static org.mockito.Mockito.*;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.jupiter.MockitoExtension;

@ExtendWith(MockitoExtension.class)
public class ExampleServiceTest {

    @Mock
    private DependencyClass dependency;

    @InjectMocks
    private ExampleService service;

    @BeforeEach
    void setUp() {
        // 초기 설정
    }

    @Test
    void testExampleMethod() {
        // Given
        given(dependency.someMethod()).willReturn("expected value");

        // When
        String result = service.exampleMethod();

        // Then
        assertEquals("expected value", result);
        verify(dependency).someMethod();
    }
}

각 섹션의 자세한 설명

  1. Given:

    java코드 복사
    given(dependency.someMethod()).willReturn("expected value");
    
    
  2. When:

    java코드 복사
    String result = service.exampleMethod();
    
    
  3. Then:

    assertEquals("expected value", result);
    verify(dependency).someMethod();
    
    

Mockito BDD 스타일 메서드

Mockito는 BDD 스타일의 메서드를 제공합니다:

예를 들어:

given(dependency.someMethod()).willReturn("expected value");

는 다음과 동일합니다:

java코드 복사
when(dependency.someMethod()).thenReturn("expected value");

예제 서비스 클래스와 의존성 클래스

테스트 대상이 되는 실제 클래스와 그 의존성 클래스는 다음과 같이 생겼을 수 있습니다.

public class ExampleService {
    private final DependencyClass dependency;

    public ExampleService(DependencyClass dependency) {
        this.dependency = dependency;
    }

    public String exampleMethod() {
        return dependency.someMethod();
    }
}

public class DependencyClass {
    public String someMethod() {
        return "actual value";
    }
}