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();
}
}
Given:
given
메서드를 사용하여 dependency.someMethod()
가 호출될 때 "expected value"를 반환하도록 설정합니다.java코드 복사
given(dependency.someMethod()).willReturn("expected value");
When:
service.exampleMethod()
를 호출합니다.java코드 복사
String result = service.exampleMethod();
Then:
assertEquals
를 사용하여 반환값이 "expected value"인지 확인하고, verify
를 사용하여 dependency.someMethod()
가 호출되었는지 확인합니다.assertEquals("expected value", result);
verify(dependency).someMethod();
Mockito는 BDD 스타일의 메서드를 제공합니다:
given
: when
메서드의 BDD 스타일입니다.willReturn
, willThrow
, willAnswer
: thenReturn
, thenThrow
, thenAnswer
의 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";
}
}