DEV Community

Cover image for Flutter Entegrasyon Testi | Bölüm 1
Gülsen Keskin
Gülsen Keskin

Posted on • Edited on

6 4

Flutter Entegrasyon Testi | Bölüm 1

Test Çeşitleri
• Integration
• Unit
• Widget

Unit ve Widget testleri, tek tek sınıfları, fonksiyonları veya widget'ları test etmek için kullanışlıdır. Ancak bir bütün olarak uygulamanın nasıl çalıştığını test etmezler veya gerçek bir cihazda çalışan bir uygulamanın performansını yakalayamazlar. Bu gibi durumlar için entegrasyon testleri kullanılır.

Entegrasyon testleri, SDK tarafından sağlanan integration_test paketi kullanılarak yazılır.

Uygulamanız için entegrasyon testi yazmak için öncelikle pubspec.yaml dosyasına aşağıdaki bağımlılıkları ekleyin

dev_dependencies:
  integration_test:
    sdk: flutter
  flutter_test:
    sdk: flutter

Enter fullscreen mode Exit fullscreen mode

Boş bir app_test.dart dosyasıyla integration_test adında yeni bir dizin oluşturun:

your_app/
  lib/
    main.dart
  integration_test/
    app_test.dart

Enter fullscreen mode Exit fullscreen mode

Paketiniz aşağıdaki gibi bir yapıda olmalıdır.

lib/
  ...
integration_test/
  foo_test.dart //test dosyalarınız..
  bar_test.dart
test/
  # Diğer unit testler buraya gelir.
test_driver/
  integration_test.dart
Enter fullscreen mode Exit fullscreen mode

Testleri çalıştırmak:

Entegrasyon testlerini çalıştırma süreci, test ettiğiniz platforma göre değişir. Bir mobil platforma veya web'e karşı test edebilirsiniz.

a. mobil

Gerçek bir iOS/Android cihazında testlerinizi çaşıştırmak için önce cihazı bağlayın (veya emulator kullaın) ve projenin kökünden aşağıdaki komutu çalıştırın:

flutter test integration_test/app_test.dart
Enter fullscreen mode Exit fullscreen mode

Veya tüm entegrasyon testlerinizi çalıştırmak istiyorsanız sadece dizini belirtin:

flutter test integration_test

Enter fullscreen mode Exit fullscreen mode

Bu komut buz dizinde yer alan tüm entegrasyon testlerini çalıştırır.

b. web
Testlerinizi bir web tarayıcısında çalıştırmak istiyorsanız öncelikle ChromeDriver'ı indirin

Ardından aşağıdaki içeriklerle test_driver klasöründe integration_test.dart adlı bir dosya oluşturun:

import 'package:integration_test/integration_test_driver.dart';

Future<void> main() => integrationDriver();
Enter fullscreen mode Exit fullscreen mode

WebDriver'ı başlatın, örneğin:

chromedriver --port=4444

Enter fullscreen mode Exit fullscreen mode

Projenin kökünden aşağıdaki komutu çalıştırın:

flutter drive \
  --driver=test_driver/integration_test.dart \
  --target=integration_test/app_test.dart \
  -d web-server
Enter fullscreen mode Exit fullscreen mode

Screenshots

Test sırasında belirli bir zamanda mobil cihazda veya Web tarayıcısında oluşturulan kullanıcı arayüzünün ekran görüntülerini almak için integration_test'ini kullanabilirsiniz. Bu özellik şu anda Android, iOS ve Web'de desteklenmektedir.

integration_test/screenshot_test.dart

void main() {
  final binding = IntegrationTestWidgetsFlutterBinding.ensureInitialized()
      as IntegrationTestWidgetsFlutterBinding;

  testWidgets('screenshot', (WidgetTester tester) async {
// Uygulamayı oluşturun.
    app.main();

// Bu, ekran görüntüsünü almadan önce gereklidir (yalnızca Android).
    await binding.convertFlutterSurfaceToImage();

    await tester.pumpAndSettle();
    await binding.takeScreenshot('screenshot-1');
  });
}
Enter fullscreen mode Exit fullscreen mode

Cihazdan ekran görüntüsünü almak için bir driver script kullanabilirsiniz. Bu şekilde, görüntüleri bilgisayarınızda yerel olarak saklayabilirsiniz. iOS'ta ekran görüntüsü Xcode test sonuçlarında da gözükür.

test_driver/integration_test.dart

import 'dart:io';
import 'package:integration_test/integration_test_driver_extended.dart';

Future<void> main() async {
  await integrationDriver(
    onScreenshot: (String screenshotName, List<int> screenshotBytes) async {
      final File image = File('$screenshotName.png');
      image.writeAsBytesSync(screenshotBytes);
// Ekran görüntüsü geçersizse false döndürür.
      return true;
    },
  );
}
Enter fullscreen mode Exit fullscreen mode

Bir grupta birden fazla testi birleştirmek

Birbiriyle ilişkili birkaç testiniz varsa, bunları test paketi tarafından sağlanan grup fonksiyonunu kullanarak birleştirin.

import 'package:counter_app/counter.dart';
import 'package:test/test.dart';

void main() {
  group('Counter', () {
    test('value should start at 0', () {
      expect(Counter().value, 0);
    });

    test('value should be incremented', () {
      final counter = Counter();

      counter.increment();

      expect(counter.value, 1);
    });

    test('value should be decremented', () {
      final counter = Counter();

      counter.decrement();

      expect(counter.value, -1);
    });
  });
}
Enter fullscreen mode Exit fullscreen mode

Testleri bir terminalde çalıştırın

flutter test test/counter_test.dart

Devamı sonraa... :)

resources:

https://docs.flutter.dev/cookbook/testing
https://docs.flutter.dev/cookbook/testing/integration/introduction
https://github.com/flutter/flutter/tree/main/packages/integration_test

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Billboard image

The Next Generation Developer Platform

Coherence is the first Platform-as-a-Service you can control. Unlike "black-box" platforms that are opinionated about the infra you can deploy, Coherence is powered by CNC, the open-source IaC framework, which offers limitless customization.

Learn more