Skip to content

emka.web.id

menulis pengetahuan – merekam peradaban

Menu
  • Home
  • Tutorial
  • Search
Menu

Stub_Gen, Package Flutter untuk Buat Stub Object dengan Cepat

Posted on June 8, 2024

Dunia pengembangan aplikasi mobile semakin dinamis. Flutter, sebagai framework cross-platform populer, terus berkembang dengan fitur-fitur baru seperti sealed class, record, dan deconstructing via pattern matching di Dart 3. Peningkatan ini tentunya membuat pengembangan aplikasi Flutter semakin menarik!

Artikel ini akan membahas stub_gen, sebuah package Dart yang dapat membuat stub secara otomatis untuk objek Dart. Stub sendiri berguna untuk memfasilitasi pembuatan unit test, terutama ketika kita berhadapan dengan class yang besar dan kompleks.

Kenapa Menggunakan Stub?

Stub memiliki beberapa manfaat dalam pengembangan aplikasi, terutama saat:

  • Menulis unit test untuk class besar: Mengisolasi logika class yang kompleks menjadi lebih mudah dengan bantuan stub.
  • Mengembangkan fitur baru tanpa menunggu tim lain: Anda dapat melanjutkan pengembangan fitur baru tanpa terpaku pada progres tim lain, misalnya tim backend server.

Membuat stub secara manual biasanya membutuhkan penetapan nilai awal untuk setiap parameter. Proses ini bisa memakan waktu dan membosankan. Inilah mengapa stub_gen hadir untuk membantu Anda!

Melihat Manfaat stub_gen dengan Contoh

Mari kita lihat contoh kode aplikasi berikut:

class Todo {
  Todo({
    required this.id,
    required this.title,
    required this.isDone,
    required this.deadline,
    required this.completeFraction,
    required this.ownerId,
  });

  final String id;
  final String title;
  final bool isDone;
  final DateTime deadline;
  final double completeFraction;
  final String ownerId;
}

class System {
  static Future<Todo> makeDone({required String todoId}) async {
    final todo = await Server.fetch(id: todoId);
    todo.isDone = true;
    todo.completeFraction = 1.0;
    await Server.store(todo: updatedTodo);
    return updatedTodo;
  }
}

class Server {
  static final Map<String, Todo> _memory = {};

  static Future<Todo> fetch({required String id}) async {
    return _memory[id]!;
  }

  static Future<void> store({required Todo todo}) async {
    _memory[todo.id] = todo;
  }
}

Untuk mempermudah, contoh ini menggunakan Server in-memory yang tidak terhubung ke jaringan nyata.

Sekarang, kita ingin menguji objek System yang memiliki method makeDone.

Skenario Unit Test:

  • Given: Tugas sedang berlangsung.
  • When: Tugas diselesaikan.
  • Then: Tugas menjadi selesai dengan completeFraction 1.
import 'package:test/test.dart';

void main() {
  group('System', () {
    test('makeDone sets task to done with completeFraction 1.0', () async {
      // Given
      final todo = Todo(
        id: '1',
        title: 'Test Task', // Boilerplate
        isDone: false,
        deadline: DateTime.now().add(const Duration(day: 1)),
        completeFraction: 0.5,
        ownerId: 'owner1', // Boilerplate
      );

      // Store the initial Todo in the server's memory
      Server._memory[todo.id] = todo;

      // When
      final updatedTodo = await System.makeDone(todoId: todo.id);

      // Then
      expect(updatedTodo.isDone, true);
      expect(updatedTodo.completeFraction, 1.0);
    });
  });
}

Meskipun unit test ini sederhana, terdapat beberapa boilerplate seperti title: 'Test Task' dan ownerId: 'owner1'. Saat aplikasi berkembang, boilerplate ini dapat menjadi penghambat penulisan unit test yang bersih.

stub_gen: Solusi untuk Boilerplate

Dengan menggunakan anotasi @StubGen dari stub_gen, kita dapat mengurangi boilerplate pada unit test.

1. Tambahkan Anotasi @StubGen

Tambahkan anotasi @StubGen() ke class yang ingin dibuatkan stub.

@StubGen()
class Todo {
  Todo({
    required this.id,
    required this.title,
    required this.isDone,
    required this.deadline,
    required this.completeFraction,
    required this.ownerId,
  });

  final String id;
  final String title;
  final bool isDone;
  final DateTime deadline;
  final double completeFraction;
  final String ownerId;
}

sadsad

Lanjutan: Meningkatkan Kualitas Unit Test dengan stub_gen di Flutter

2. Generate Stub Code

Setelah menambahkan anotasi @StubGen, jalankan perintah build_runner build untuk menghasilkan stub code.

3. Gunakan Stub di Unit Test

Sekarang, Anda dapat menggunakan stub di unit test Anda.

import 'package:test/test.dart';

void main() {
  group('System', () {
    test('makeDone sets task to done with completeFraction 1.0', () async {
      // Given
      // NOTE: Anda tidak perlu menetapkan nilai persis seperti pada boilerplate.
      final todo = TodoStub.stub(
        isDone: false,
        deadline: DateTime.now().add(const Duration(day: 1)),
        completeFraction: 0.5,
      );

      // Store the initial Todo in the server's memory
      Server._memory[todo.id] = todo;

      // When
      await System.makeDone(todoId: todo.id);

      // Then
      final updatedTodo = Server._memory[todo.id]!;
      expect(updatedTodo.isDone, true);
      expect(updatedTodo.completeFraction, 1.0);
    });
  });
}

Dengan menggunakan stub_gen, unit test Anda menjadi lebih mudah dibaca dan dipahami. Anda tidak perlu lagi terjebak dalam boilerplate yang membosankan.

Kesimpulan

stub_gen dapat membantu Anda menulis unit test yang lebih baik dan lebih cepat dengan mengurangi boilerplate dan meningkatkan keterbacaan kode.

Semoga bermanfaat!

Terbaru

  • Apa Itu Google AI Pro Ultra? Ini Pengertian dan Penjelasan Lengkapnya
  • Apa Itu Error Gagal Kirim Nilai RDM 3.1? Ini Pengertian dan Solusi Mengatasinya
  • Facebook Mulai Batasi Link Eksternal Cuma 2 Sebulan! Ini Trik Mengatasinya
  • Cara Nonton Tensura Season 4! Bakal Tayang April 2026 dengan Format 5 Cour
  • Belum Tahu? Inilah Trik Supaya Live TikTok Kalian Aman dan Banjir Cuan
  • Pixel 8 Dapatkan Mode Panorama Baru! Hasil Foto Lebih Luas & Lebih Kreatif
  • Apa Itu AppLocker? Ini Pengertian dan Cara Mengamankan Windows 11 Kalian dari Skrip Jahat
  • Cara Membuat Riwayat Copilot Kamu Tetap Bersih dan Rapi!
  • Game & Aplikasi Android Terbaik Saat Diskon Liburan Natal! Jangan Ketinggalan!
  • Apa Itu Game Prison Escape Journey? Ini Pengertian dan Cara Mainnya untuk Pemula
  • “Listrik Gratis” dari Solar Panel Cuma Mitos?! Ini Sisi Gelap PLTS
  • Samsung Galaxy Z-Fold: Uji Jatuh Bebas yang Mengguncang Keandalan Lipatannya
  • Google One 2026: Apa yang Akan Jadi Fitur Utama dan Harga yang Diharapkan?
  • Apa Itu Error 0x800704f8? Ini Pengertian dan Cara Mengatasinya
  • Android Akhirnya Dapat GPS Darurat di India! Setelah Hampir 10 Tahun
  • Apa Itu GetContact Premium? Ini Pengertian dan Cara Daftarnya
  • Android Maze Figure: Koleksi Baru Google yang Bikin Penggemar Bergairah!
  • Google Update Besar-besaran Desember 2025: Apa yang Akan Memengaruhi Pengalaman Anda?
  • Masih Pusing Hitung Gaji Manual? Waktunya Pakai Aplikasi HR
  • Apa Itu Dustruco? Ini Pengertian dan Cara Pasangnya di HP Kalian
  • Apa Itu Aplikasi Dooie Live? Ini Pengertian dan Cara Pakai Aplikasinya untuk Cari Jodoh
  • Apa Itu Battle Emote Jefri Nichol dan Om Telolet Om di MLBB? Ini Penjelasannya
  • Apa itu Game Luna Mobile dan Bagaimana Cara Menangnya?
  • Apa Itu Kompensasi Sistem Trail Mobile Legends? Ini Penjelasan dan Cara Klaim Hadiahnya
  • Apa Itu Update Google Pixel 2 Desember 2025? Ini Penjelasannya!
  • Ini Cara Reset Desil di Aplikasi Cek Bansos Biar Valid (Update Januari 2026)
  • Apa Itu EZNET Wireless dan Fiber Optic? Ini Perbedaan dan Pengertian Lengkapnya
  • Pengertian Rework Magic Wheel dan Rank Mythic Eternal: Apa itu Perubahan Sistem Baru Mobile Legends?
  • Apa Itu Diamond Combo? Pengertian Game Puzzle Viral yang Katanya Bisa Hasilkan Cuan
  • Apa Itu Showbox? Pengertian, Fungsi, dan Cara Menggunakannya di Android
  • Apa itu Cosmic Desktop: Pengertian dan Cara Pasangnya di Ubuntu 26.04?
  • Apa Itu Auvidea X242? Pengertian Carrier Board Jetson T5000 dengan Dual 10Gbe
  • Elementary OS 8.1 Resmi Rilis: Kini Pakai Wayland Secara Standar!
  • Apa Itu Raspberry Pi Imager? Pengertian dan Pembaruan Versi 2.0.3 yang Wajib Kalian Tahu
  • Performa Maksimal! Ini Cara Manual Update Ubuntu ke Linux Kernel 6.18 LTS
  • Apa Itu AI Gateway? Ini Definisi Tulang Punggung Infrastruktur AI Modern
  • Apa Itu Google AI Pro Ultra? Pengertian dan Bedah Fitur Terbarunya
  • Apa Itu FARA 7B? Ini Pengertian dan Cara Menjalankannya di Windows 11
  • Jelang Natal 2025 Fireworks.AI Beri Update Baru di NVIDIA Nemotron 3? Ini Penjelasan Lengkapnya
  • Apa Itu Elestio VibeCoder? Ini Pengertian dan Penjelasan Lengkapnya
  • Tagihan AWS Sekarang Bisa Dibayar Pakai BNB via BPN, Ini Caranya!
  • Video Botol Teh Pucuk 1 Menit 50 Detik yang Viral di TikTok! Hati-Hati Kejahatan Siber
  • Apa Itu Kerentanan WatchGuard CVE-2024-36193? Ini Penjelasannya
  • Gila! 574 Penjahat Siber Diciduk Interpol di Afrika, Kok Bisa Jaringannya Segede Ini?
  • Apa Itu Regulasi Drone Asing FAA? Ini Pengertian dan Implikasinya
Beli Morning Star Kursi Gaming/Kantor disini: https://s.shopee.co.id/805iTUOPRV
Beli Pemotong Rumput dengan Baterai IRONHOOF 588V Mesin Potong Rumput 88V disini https://s.shopee.co.id/70DBGTHtuJ

©2025 emka.web.id | Design: Newspaperly WordPress Theme