Robolectric에서 테스트 대상을 어떻게 설정하나요?
_____A1: Robolectric 테스트 클래스 내에 `@RunWith(RobolectricTestRunner.class)`을 선언한 후, 일반적으로 테스트하려는 Activity나 클래스의 인스턴스를 직접 생성하거나 `Robolectric.buildActivity()` 같은 메서드를 사용해 생성합니다. 예를 들어 Activity 테스트 시:
```java
@RunWith(RobolectricTestRunner.class)
public class MainActivityTest {
private MainActivity activity;
@Before
public void setUp() {
activity = Robolectric.buildActivity(MainActivity.class).create().resume().get();
}
}
```
이렇게 하면 `MainActivity`가 테스트 대상이 됩니다.
---
Q2: `@Config` 어노테이션은 테스트 대상 설정에 어떤 역할을 하나요?
A2: `@Config` 어노테이션을 통해 SDK 버전, 리소스, 패키지명 등 테스트 환경의 설정을 지정할 수 있으며 특정 클래스 또는 테스트 메서드 단위로 설정할 수 있습니다. 테스트 대상의 환경을 세밀하게 맞추고 싶을 때 사용합니다. 예:
```java
@Config(sdk = 28)
@RunWith(RobolectricTestRunner.class)
public class MainActivityTest { ... }
```
---
Q3: Robolectric 테스트에서 커스텀 Application 클래스를 사용하려면 어떻게 하나요?
A3: `@Config(application = CustomApplication.class)`를 사용해 특정 Application 클래스를 지정합니다. 이렇게 하면 테스트 시 해당 Application 인스턴스가 활용됩니다.
```java
@Config(application = MyCustomApplication.class)
@RunWith(RobolectricTestRunner.class)
public class SomeTest { ... }
```
---
Q4: Robolectric이 자동으로 테스트 대상을 감지하나요?
A4: Robolectric은 테스트 클래스에 명시된 생성 방식을 따릅니다. 즉, `Robolectric.buildActivity()` 또는 직접 클래스를 인스턴스화하는 방식을 통해 테스트 대상을 지정해야 하며, 자동으로 감지하지는 않습니다.
---
Q5: Fragment 같은 컴포넌트도 Robolectric 테스트 대상이 될 수 있나요?
A5: 네, Fragment도 `FragmentController`를 이용해 생성하고 라이프사이클을 관리하며 테스트할 수 있습니다. 예:
```java
FragmentController
controller.create().start().resume();
MyFragment fragment = controller.get();
```
---
요약하면, Robolectric에서 테스트 대상 설정은 테스트 클래스 내에서 직접 인스턴스를 생성하거나 빌더를 통해 명확히 지정하는 방식이며, `@Config` 어노테이션으로 환경을 세팅해줍니다. 자동 감지는 지원하지 않으므로 반드시 명시적으로 설정해야 합니다.
1. 테스트 클래스에 @RunWith(RobolectricTestRunner.class) 적용하기 Robolectric을 사용하려면 먼저 테스트 클래스 위에 `@RunWith(RobolectricTestRunner.class)` 어노테이션을 붙여야 합니다.
이 어노테이션은 JUnit이 테스트를 실행할 때 Robolectric 환경을 사용하도록 지정합니다.
예를 들어: ```java @RunWith(RobolectricTestRunner.class) public class MyActivityTest { ... } ```
2. 특정 컴포넌트(액티비티, 서비스 등)를 명시적으로 생성하기 Robolectric은 일반적으로 안드로이드 컴포넌트를 실제 기기 없이 JVM에서 실행할 수 있게 해주는데, 테스트 대상 컴포넌트는 직접 생성하거나 초기화해야 합니다.
예를 들어, 액티비티를 테스트하고자 할 때는 `Robolectric.buildActivity()` 메서드를 사용해 액티비티 인스턴스를 생성합니다: ```java ActivityController
3. @Config 어노테이션으로 테스트 환경 세부 설정하기 때때로 특정 SDK 버전을 지정하거나, 애플리케이션 클래스 등을 지정하고 싶으면 `@Config` 어노테이션을 추가로 붙일 수 있습니다.
예: ```java @Config(sdk = 2
8) public class MyActivityTest { ... } ``` 이를 통해 테스트 환경을 좀 더 세밀하게 조정할 수 있습니다.
4. Application 클래스 지정하기 테스트 대상이 커스텀 Application 클래스를 사용하는 경우 `@Config(application = MyApplication.class)`처럼 지정해줘야 정상 작동합니다.
5. 뷰와 기타 컴포넌트 테스트 시, 직접 생성 및 바인딩 액티비티가 아닌 단일 뷰나 프래그먼트를 테스트할 때는 직접 해당 뷰 객체를 생성하거나, 프래그먼트 매니저를 통해 생성한 뒤, 수동으로 생명주기를 실행해야 합니다.
--- Robolectric에서 테스트 대상을 설정하려면: - 먼저 테스트 클래스에 `@RunWith(RobolectricTestRunner.class)`를 적용한다.
- 테스트 대상 액티비티, 서비스, 프래그먼트 등의 컴포넌트를 `Robolectric.build*()` 메서드를 사용해 생성 및 초기화한다.
- 필요에 따라 `@Config` 어노테이션으로 SDK 버전, Application 클래스 등 테스트 환경을 설정한다.
- 이렇게 설정된 컴포넌트에서 메서드를 호출하거나 상태를 검증하며 테스트를 진행한다.
이러한 단계들을 통해 Robolectric이 실제 안드로이드 환경 없이도 JVM 상에서 컴포넌트를 초기화하고 실행, 검증할 수 있도록 테스트 대상을 명확히 정의할 수 있습니다.
작성자:
정재민 [비회원]
| 작성일자: 1년 전
2025-05-26 03:51:06
조회수: 149 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
조회수: 149 | 댓글: 0 | 좋아요: 0 | 싫어요: 0
내용이 부정확하다면 싫어요를 클릭해주세요.