大型項目裡Flutter測試應用實例集成測試深度使用詳解

測試應用實例_Flutter

    await tester.pumpWidget(
      new StatefulBuilder(
        builder: (BuildContext context, StateSetter setState) {
          return new MaterialApp(
            home: new Material(
              child: new Center(
                child: new Slider(
                  key: sliderKey,
                  value: value,
                  onChanged: (double newValue) {
                    setState(() {
                      value = newValue;
                    });
                  },
                ),
              ),
            ),
          );
        },
      )

應用的功能越多,手動測試就越困難。一整套自動化測試將幫助確保應用程序在發佈前正確執行,同時保持功能和錯誤修復速度。 有很多種自動化測試。總結如下: 單元測試:測試單個函數、方法或類。例如,被測試單元的外部依賴性通常是模擬的,例如package:mockito。單元測試通常不會讀取/寫入磁盤、呈現到屏幕或從運行測試的進程外部接收用戶操作。單元測試的目標是驗證邏輯單元在各種條件下的正確性。

 await tester.tap(find.byKey(sliderKey));
    expect(value, equals(0.5));

小部件測試:(在其他UI框架中稱為組件測試)用於測試的單個小部件。測試小部件涉及多個類,需要為測試環境提供適當的小部件生命周期上下文。例如,它應該能夠接收和響應用戶操作和事件,執行佈局,並實例化子部件。因此,Widget測試比單元測試更全面。然而,就像單元測試一樣,小部件測試環境被一個比完整UI系統簡單得多的實現所取代。小部件測試的目標是驗證小部件的UI外觀和交互是否符合預期。

 testWidgets('my first widget test', (WidgetTester tester) async {
    var sliderKey = new UniqueKey();
    var value = 0.0;

集成測試:測試整個應用程序或應用程序的大部分。通常,集成測試可以在真實設備或操作系統模擬器(如iOS模擬器或Android模擬器)上運行。測試中的應用程序通常與測試驅動程序代碼隔離,以避免結果偏差。集成測試的目標是驗證應用程序作為一個整體是否正確運行,以及它所包含的所有小部件是否按預期相互集成。還可以使用集成測試來驗證應用程序的性能。

import 'package:test/test.dart';
void main() {
  test('my first unit test', () {
    var answer = 42;
    expect(answer, 42);
  });
}

一些Flutter庫(如dart:ui)在獨立dart VM附帶的dart SDK中不可用。此顫振測試命令允許在本地Dart VM中運行測試,並使用顫振引擎而無需首頁(UI將不會顯示)。使用此命令,可以運行任何測試,無論它是否取決於Flutter庫。 使用package:test編寫Flutter單元測試。用於編寫單元測試的package:test文檔在這裡。

dev_dependencies:
  flutter_test:
    sdk: flutter

即使的測試本身沒有顯式導入到flatter_test中,因為測試框架本身在後臺使用它。 要運行測試,請從項目目錄(而不是測試子目錄)運行fluttertesttest/unit _ test.dart 要運行所有測試,請從項目目錄運行顫振測試。

集成測試

Flutter的是:命令行 A包:flatter_ driver(API) 兩者都允許:為集成測試創建指導應用程序,編寫測試,運行測試

import 'package:flutter_driver/driver_extension.dart';
void main() {
  // 啟用擴展
  enableFlutterDriverExtension();
}

集成測試是一個簡單的包:測試測試。它使用Flutter驅動程序API告訴應用程序要執行什麼操作,然後驗證應用程序是否執行瞭此操作。 出於興趣,我們還讓測試記錄性能時間線。我們創建瞭一個user_ list_ scrolling_ test.dart測試文件位於my_ app/test_ Driver/down中:

void main() {
  group('scrolling performance test', () {
    FlutterDriver driver;
    setUpAll(() async {
      // 連接app
      driver = await FlutterDriver.connect();
    });
    tearDownAll(() async {
      if (driver != null) {
        // 關閉連接
        driver.close();
      }
    });

構建–目標應用程序並將其安裝在設備上 啟動應用程序 在driver/_ list_ scrolling_ test.dart下運行my_ app/test_ User 可能想知道該命令如何找到正確的測試文件。flutter drive命令使用約定在與–target應用程序相同的目錄中查找具有相同文件名的文件,但帶有帶有測試後綴的_Test文件。

彈性框本身(行和列)的行為是不同的,這取決於它們在給定方向上是有邊界的還是無邊界的。 在邊界限制下,它們將盡可能大。 它們試圖使其子節點在沒有邊界限制的情況下適應此方向。在這種情況下,不能將子節點的flex屬性設置為0以外的任何值(默認值為0)。在小部件庫中,這意味著當彈性框位於另一個彈性框或可滾動框內時,不能使用Expanded。如果執行此操作,將收到異常消息。 在交叉方向上,例如Column的寬度和Row的高度,它們不能是無邊界的,否則它們將無法合理地對齊子節點。

 for (int i = 0; i < 5; i++) {
          await driver.scroll(
              userList, 0.0, -300.0, new Duration(milliseconds: 300));
          await new Future<Null>.delayed(new Duration(milliseconds: 500));

這些約束有時是“緊”的,這意味著它們不會為渲染框留出空間來確定其自身的大小(例如,如果最小寬度和最大寬度相同,即寬度很窄)。主要示例是App小部件,它是RenderView類中包含的一個小部件。

   for (int i = 0; i < 5; i++) {
          await driver.scroll(
              userList, 0.0, 300.0, new Duration(milliseconds: 300));
          await new Future<Null>.delayed(new Duration(milliseconds: 500));
        }

應用程序構建函數返回的子小部件的渲染框被分配瞭一個約束,迫使它精確地填充應用程序的內容區域(通常是整個屏幕)。Flutter中的許多框,特別是那些隻包含一個子控件的框,會將其約束傳遞給其子控件。這意味著,如果在應用程序渲染樹的根處嵌套一些框,則所有子節點都受這些渲染框的約束。

      summary.writeSummaryToFile('stocks_scroll_perf', pretty: true);
      summary.writeTimelineToFile('stocks_scroll_perf', pretty: true);

以上就是大型項目裡Flutter測試應用實例集成測試深度使用詳解的詳細內容,更多關於Flutter集成測試的資料請關註WalkonNet其它相關文章!

推薦閱讀: