2026년 상식닷컴 선정 식당 & 카페 리스트
최근에 오픈한 호텔을 찾는다면 살펴보세요

Robolectric에서 Mock 객체를 생성하는 방법은 무엇인가요?

_____
Q1: Robolectric에서 Mock 객체를 생성하려면 어떻게 해야 하나요?
A1: Robolectric 자체는 Mockito와 같은 Mocking 프레임워크를 직접 제공하지 않습니다. 따라서 일반적으로 Robolectric 테스트에서 Mockito를 함께 사용하여 Mock 객체를 생성합니다. 즉, Mockito의 `@Mock` 어노테이션이나 `Mockito.mock()` 메서드를 사용해 Mock 객체를 생성하고, Robolectric 테스트 내에서 이를 활용할 수 있습니다.

---

Q2: Robolectric 테스트에서 Mockito를 연동하려면 어떻게 설정해야 하나요?
A2:
1. `build.gradle` 파일에 다음과 같이 의존성을 추가합니다:
```gradle
testImplementation 'org.robolectric:robolectric:'
testImplementation 'org.mockito:mockito-core:'
testImplementation 'org.mockito:mockito-inline:' // 필요 시
testImplementation 'org.mockito:mockito-android:' // Android 관련 테스트 시
```
2. 테스트 클래스에 `@RunWith(RobolectricTestRunner.class)`를 붙입니다.
3. Mock 객체를 선언할 때 `@Mock` 어노테이션을 쓰고, `MockitoAnnotations.initMocks(this);` 또는 JUnit4 기준 `@Before` 메서드 내에서 초기화합니다. JUnit5 사용 시에는 `@ExtendWith(MockitoExtension.class)` 등을 활용합니다.

---

Q3: 예시 코드로 Robolectric에서 Mock 객체를 생성하는 방법은?
A3:
```java
@RunWith(RobolectricTestRunner.class)
public class ExampleRobolectricTest {

@Mock
MyDependency myDependency;

@Before
public void setUp() {
MockitoAnnotations.openMocks(this);
}

@Test
public void testWithMock() {
when(myDependency.someMethod()).thenReturn("mocked result");

MyClass myClass = new MyClass(myDependency);
String result = myClass.callDependency();

assertEquals("mocked result", result);
}
}
```

---

Q4: Robolectric 외에 사용하는 Mock 프레임워크가 있나요?
A4: 가장 많이 사용하는 것은 Mockito이며, 그 외에도 MockK (Kotlin용), EasyMock 등이 있으나 Robolectric과는 별개로 활용합니다. Robolectric 테스트에서는 기본적으로 Mockito가 가장 호환성이 좋고 널리 쓰입니다.

---

Q5: Robolectric 안에서 Android SDK 클래스도 Mocking 가능한가요?
A5: Robolectric 자체가 Android SDK 클래스를 JVM 환경에서 흉내 내어 동작하게 해주므로, 대부분의 Android 클래스는 실제 구현체가 Robolectric에 의해 대체됩니다. 그 외에 자신이 만든 의존성이나 인터페이스를 Mockito로 Mocking하는 식으로 사용하는 것이 일반적입니다.

---

요약:
- Robolectric은 Mock 객체 생성 기능을 제공하지 않음
- Mockito를 함께 사용해 Mock 객체 생성
- `@Mock`, `MockitoAnnotations.openMocks(this)` 와 같은 일반 Mockito 패턴 적용 가능
- Robolectric 테스트 클래스에 `@RunWith(RobolectricTestRunner.class)` 적용
- build.gradle에 Robolectric과 Mockito 의존성 추가 필요
Robolectric은 안드로이드 유닛 테스트를 위해 안드로이드 프레임워크 동작을 JVM 환경에서 흉내 내는 라이브러리입니다.

하지만 Robolectric 자체는 Mock 객체를 생성하는 기능을 제공하지 않습니다.

대신, Mockito, MockK 같은 목 라이브러리와 함께 사용하여 Mock 객체를 만듭니다.

Robolectric 테스트에서 Mock 객체를 생성하는 기본적인 방법은 다음과 같습니다.

1. Mockito 의존성 추가 먼저 build.gradle에 Mockito 의존성을 추가해야 합니다.

예를 들어: ```gradle testImplementation 'org.mockito:mockito-core:4.+' testImplementation "org.robolectric:robolectric:4.+" ``` Mockito Android용인 mockito-android 대신 mockito-core를 사용하세요.

Robolectric 테스트는 JVM 환경에서 수행되므로 mockito-core가 적합합니다.



2. 테스트 클래스에서 Mock 객체 생성 Mock 생성은 Mockito.mock()이나 @Mock 애노테이션을 사용할 수 있습니다.

- Mockito.mock() 사용: ```java import static org.mockito.Mockito.mock; public class ExampleTest { @Test public void testSomething() { MyClass myMock = mock(MyClass.class); // myMock 메서드 동작 설정 및 검증 수행 } } ``` - @Mock 및 MockitoAnnotations.initMocks() 또는 MockitoAnnotations.openMocks() 사용: ```java import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.junit.Before; public class ExampleTest { @Mock MyClass myMock; @Before public void setup() { MockitoAnnotations.openMocks(this); } @Test public void testSomething() { // myMock 사용 } } ```

3. Robolectric 환경에서의 주의사항 - Robolectric 테스트에서는 안드로이드 컴포넌트를 직접 생성하여 활용할 수 있지만, 내부 의존성이 복잡한 경우 Mock 객체로 대체하면 테스트가 더 단순해집니다.

- Mockito를 사용할 때, final 클래스나 final 메서드는 모킹이 안 될 수 있으므로 mockito-inline 을 추가로 설정할 수 있습니다.

- Kotlin 사용 시에는 MockK를 대신 사용할 수 있고, Robolectric 테스트 내에서도 MockK가 잘 동작합니다.



4. 예시: Activity 내 의존성 Mock하기 ```java @RunWith(RobolectricTestRunner.class) public class MainActivityTest { @Mock SomeDependency mockDependency; @Before public void setUp() { MockitoAnnotations.openMocks(this); } @Test public void testActivityBehavior() { MainActivity activity = Robolectric.buildActivity(MainActivity.class).create().get(); activity.setDependency(mockDependency); when(mockDependency.doSomething()).thenReturn("Mocked Result"); String result = activity.callDependency(); assertEquals("Mocked Result", result); } } ``` 위 예제처럼 Robolectric으로 Activity를 생성하고, 내부 의존성을 Mockito Mock 객체로 주입하여 테스트할 수 있습니다.

Robolectric은 안드로이드 컴포넌트의 동작을 JVM 환경에서 흉내 내는 역할을 하며 Mock 객체 생성은 Mockito(혹은 MockK) 같은 별도 Mock 라이브러리를 활용하여 만듭니다.

따라서 Robolectric 테스트에서 Mock 객체를 만들고 싶다면 Mockito.mock() 또는 @Mock 애노테이션 같이 Mockito의 표준 방식을 그대로 사용하면 됩니다.

작성자: 박주희 [비회원] | 작성일자: 1년 전 2025-05-26 03:51:08
조회수: 176 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.