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

  • Inilah Kenapa AI Sering Jadi Kambing Hitam Saat PHK Massal, Padahal Masalahnya Bukan Itu!
  • Inilah Cara Baru Cepat Monetisasi YouTube Tanpa Trik Musik, Cuma 2 Bulan Langsung Cuan!
  • Inilah Kapan Pengumuman SNBP 2026 Jam Berapa Lengkap dengan Cara Cek Hasil Kelulusannya
  • Belum Tahu? Inilah Cara Zakat Perusahaan Kalian Bisa Jadi Pengurang Pajak Penghasilan Bruto!
  • Inilah Cara Menggabungkan Grid Foto Online dan Hapus Background Foto
  • Kenapa Youtuber Mulai Harus Hati-hati Pakai AI: Bisa Digugat dan Kehilangan Hak Cipta!
  • Inilah Alasan Kenapa Sumbangan ke Tempat Ibadah Biasa Nggak Bisa Langsung Jadi Pemotong Pajak!
  • Belum Tahu? Inilah Cara Pasang Iklan Meta Ads untuk Sales WiFi Supaya Banjir Closingan!
  • Inilah Alur Pengerjaan EMIS GTK 2026 yang Benar dari Awal Sampai Akhir
  • Inilah 27 Sekolah Kedinasan untuk Lulusan SMK 2026, Bisa Kuliah Gratis dan Langsung Jadi CPNS!
  • Inilah Cara Kuliah S2 di Inggris dengan GREAT Scholarship 2026: Syarat Lengkap, Daftar Kampus, dan Tips Jitu Biar Lolos!
  • Belum Tahu? Inilah Alasan Non-Muslim Juga Bisa Ngurangin Pajak Pake Sumbangan Keagamaan Wajib!
  • Inilah Kenapa Zakat ke Pondok Pesantren Mungkin Nggak Bisa Jadi Pengurang Pajak, Yuk Cek Syaratnya!
  • Inilah Caranya Daftar SMA Unggul Garuda Baru 2026 yang Diperpanjang, Cek Syarat dan Link Resminya!
  • Cara Cek Pencairan KJP Plus Tahap 1 Januari 2026 Beserta Daftar Nominal Lengkapnya
  • Lengkap! Inilah Kronologi Meninggalnya Vidi Aldiano Berjuang Melawan Kanker
  • Inilah Cara Tarik Data PKH di EMIS 4.0 Agar Bantuan Siswa Tetap Cair!
  • Inilah Trik Jitu SEO Shopee untuk Pemula: Jualan Laris Manis Tanpa Perlu Bakar Duit Iklan!
  • Inilah Peluang Emas Jadi Karyawan BUMN Tanpa Ngantre: Program Ikatan Kerja ULBI 2026
  • Inikah Daftar CPNS Kemenkeu 2026? Cek 48 Jurusan yang Paling Dibutuhkan!
  • Inilah 4 Beasiswa Khusus Warga ASEAN dengan Peluang Lolos Lebih Tinggi, Kalian Wajib Tahu!
  • Inilah Alasan Ribuan Dosen ASN Melayangkan Surat Keberatan Soal Tukin 2020-2024 yang Belum Cair
  • Cara Dapat Diamond Free Fire Gratis 2026, Pemain FF Harus Tahu!
  • Inilah Cara Mengisi Presensi EMIS GTK IMP 2026 Terbaru Biar Tunjangan Lancar
  • Inilah Trik Hashtag Viral Supaya Video Shorts Kalian Nggak Sepi Penonton Lagi
  • Inilah Jawabannya, Apakah Zakat Fitrah Kalian Bisa Mengurangi Pajak Penghasilan?
  • Inilah Caranya Supaya Komisi TikTok dan Shopee Affiliate Tetap Stabil Pasca Ramadhan!
  • Inilah 10 Kesalahan Fatal Saat Beli Properti yang Bisa Bikin Kalian Bangkrut!
  • Belum Tahu Cara Masuk Simpatika Terbaru? Ini Cara Login PTK EMIS GTK IMP 2026 Supaya Cek TPG Jadi Lebih Gampang!
  • Inilah Cara Bikin Konten Animasi AI Cuma Modal HP Supaya Bisa Gajian Rutin dari YouTube
  • How to Generate Battery Report in Windows 11: A Simple Guide
  • How to Setting Up a Pro-Level Security System with Reolink and Frigate NVR
  • How to Install DaVinci Resolve on Nobara Linux and Fix Video Compatibility Issues Like a Pro
  • How to Master GitHub’s New Power Tools: Copilot CLI, Dashboards, and More!
  • How to Create and Configure DNS Server on RHEL 10
  • Securing LLM with Agentverse (Secure and Scalable Inference)
  • ModernBERT: Why the Encoder-Only Model is Making a Massive Comeback in AI History
  • How to Build Your First AI App with Lovable AI Today!
  • OpenClaw Tutorial: A Step-by-Step Guide to Coding Your Very First Website from Scratch!
  • Seedance 2.0 Is Here! Unlimited + Completely Uncensored AI Video Gen
  • Apa itu Spear-Phishing via npm? Ini Pengertian dan Cara Kerjanya yang Makin Licin
  • Apa Itu Predator Spyware? Ini Pengertian dan Kontroversi Penghapusan Sanksinya
  • Mengenal Apa itu TONESHELL: Backdoor Berbahaya dari Kelompok Mustang Panda
  • Siapa itu Kelompok Hacker Silver Fox?
  • Apa itu CVE-2025-52691 SmarterMail? Celah Keamanan Paling Berbahaya Tahun 2025
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

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