테스트는 소프트웨어 개발에서 매우 중요한 부분입니다. 플러터와 GetX를 사용하면 테스트를 쉽게 작성할 수 있습니다. 이 가이드에서는 GetX를 사용한 플러터 앱에서 유닛 테스트와 위젯 테스트를 설정하고 실행하는 방법을 설명합니다.
1. 프로젝트 설정
1.1. 새로운 플러터 프로젝트 생성
먼저 새로운 플러터 프로젝트를 생성합니다
flutter create getx_test_app
cd getx_test_app
1.2. pubspec.yaml 파일 업데이트
프로젝트의 pubspec.yaml 파일에 필요한 패키지를 추가합니다
dependencies:
flutter:
sdk: flutter
get: ^4.6.5
dev_dependencies:
flutter_test:
sdk: flutter
mockito: ^5.0.16
build_runner: ^2.1.7
그런 다음 패키지를 설치합니다
flutter pub get
2. GetX 컨트롤러 및 의존성 주입 설정
2.1. 컨트롤러 생성
먼저, 간단한 GetX 컨트롤러를 생성합니다.
lib/controllers/counter_controller.dart 파일
import 'package:get/get.dart';
class CounterController extends GetxController {
var count = 0.obs;
void increment() {
count++;
}
void decrement() {
count--;
}
}
2.2. 의존성 주입 설정
lib/main.dart 파일
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'controllers/counter_controller.dart';
void main() {
// CounterController를 GetX에 주입합니다.
Get.put(CounterController());
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return GetMaterialApp(
title: 'GetX Test Demo',
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
@override
Widget build(BuildContext context) {
final CounterController controller = Get.find<CounterController>();
return Scaffold(
appBar: AppBar(
title: Text('GetX Test Demo'),
),
body: Center(
child: Obx(() {
return Text('Count: ${controller.count}');
}),
),
floatingActionButton: Column(
mainAxisAlignment: MainAxisAlignment.end,
children: [
FloatingActionButton(
onPressed: controller.increment,
child: Icon(Icons.add),
),
SizedBox(height: 10),
FloatingActionButton(
onPressed: controller.decrement,
child: Icon(Icons.remove),
),
],
),
);
}
}
3. 유닛 테스트
3.1. CounterController 유닛 테스트
test/controllers/counter_controller_test.dart 파일
import 'package:flutter_test/flutter_test.dart';
import 'package:get/get.dart';
import 'package:getx_test_app/controllers/counter_controller.dart';
void main() {
group('CounterController Test', () {
late CounterController controller;
setUp(() {
controller = CounterController();
Get.put(controller);
});
tearDown(() {
Get.reset();
});
test('Initial value should be 0', () {
expect(controller.count.value, 0);
});
test('Increment function should increase count by 1', () {
controller.increment();
expect(controller.count.value, 1);
});
test('Decrement function should decrease count by 1', () {
controller.decrement();
expect(controller.count.value, -1);
});
});
}
4. 위젯 테스트
4.1. HomeScreen 위젯 테스트
test/widgets/home_screen_test.dart 파일
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:get/get.dart';
import 'package:getx_test_app/controllers/counter_controller.dart';
import 'package:getx_test_app/main.dart';
void main() {
testWidgets('HomeScreen Widget Test', (WidgetTester tester) async {
// CounterController를 주입합니다.
Get.put(CounterController());
await tester.pumpWidget(MyApp());
// 초기 카운트 값이 0인지 확인합니다.
expect(find.text('Count: 0'), findsOneWidget);
// Increment 버튼을 눌러 카운트 값을 증가시킵니다.
await tester.tap(find.byIcon(Icons.add));
await tester.pump();
// 카운트 값이 1인지 확인합니다.
expect(find.text('Count: 1'), findsOneWidget);
// Decrement 버튼을 눌러 카운트 값을 감소시킵니다.
await tester.tap(find.byIcon(Icons.remove));
await tester.pump();
// 카운트 값이 0인지 확인합니다.
expect(find.text('Count: 0'), findsOneWidget);
});
}
5. 테스트 실행
테스트를 실행하려면 다음 명령어를 사용합니다
flutter test
6. 결론
이 가이드에서는 플러터와 GetX를 사용하여 유닛 테스트와 위젯 테스트를 설정하고 실행하는 방법을 설명했습니다.
GetX의 컨트롤러와 의존성 주입 기능을 활용하여 테스트 가능한 코드를 작성할 수 있습니다.
이를 통해 코드의 품질을 높이고, 유지보수를 용이하게 할 수 있습니다.
수발가족을 위한 일기장 “나비일기장”
https://play.google.com/store/apps/details?id=com.maccrey.navi_diary_release
비공개테스트를 위한 20명의 테스터모집 앱 "테스터 쉐어"
https://play.google.com/store/apps/details?id=com.maccrey.tester_share_release
'Flutter > Flutter Programming' 카테고리의 다른 글
플러터에서 커스텀 린트를 도입하는 방법 (0) | 2024.06.08 |
---|---|
플러터에서 커스텀 린트 옵션 (2) | 2024.06.08 |
플러터 GetX에서 HTTP 요청 설정 완벽 가이드 (0) | 2024.06.07 |
플러터 GetX에서 라우팅 및 네비게이션 상세 완벽 가이드 (0) | 2024.06.07 |
Flutter GetX에서 로깅 상세 완벽 가이드 (0) | 2024.06.07 |