亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

大型項(xiàng)目里Flutter測(cè)試應(yīng)用實(shí)例集成測(cè)試深度使用詳解

 更新時(shí)間:2022年12月26日 16:59:37   作者:黎燃  
這篇文章主要為大家介紹了大型項(xiàng)目里Flutter測(cè)試應(yīng)用實(shí)例集成測(cè)試深度使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

測(cè)試應(yīng)用實(shí)例_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;
                    });
                  },
                ),
              ),
            ),
          );
        },
      )

應(yīng)用的功能越多,手動(dòng)測(cè)試就越困難。一整套自動(dòng)化測(cè)試將幫助確保應(yīng)用程序在發(fā)布前正確執(zhí)行,同時(shí)保持功能和錯(cuò)誤修復(fù)速度。 有很多種自動(dòng)化測(cè)試??偨Y(jié)如下: 單元測(cè)試:測(cè)試單個(gè)函數(shù)、方法或類。例如,被測(cè)試單元的外部依賴性通常是模擬的,例如package:mockito。單元測(cè)試通常不會(huì)讀取/寫入磁盤、呈現(xiàn)到屏幕或從運(yùn)行測(cè)試的進(jìn)程外部接收用戶操作。單元測(cè)試的目標(biāo)是驗(yàn)證邏輯單元在各種條件下的正確性。

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

小部件測(cè)試:(在其他UI框架中稱為組件測(cè)試)用于測(cè)試的單個(gè)小部件。測(cè)試小部件涉及多個(gè)類,需要為測(cè)試環(huán)境提供適當(dāng)?shù)男〔考芷谏舷挛?。例如,它?yīng)該能夠接收和響應(yīng)用戶操作和事件,執(zhí)行布局,并實(shí)例化子部件。因此,Widget測(cè)試比單元測(cè)試更全面。然而,就像單元測(cè)試一樣,小部件測(cè)試環(huán)境被一個(gè)比完整UI系統(tǒng)簡(jiǎn)單得多的實(shí)現(xiàn)所取代。小部件測(cè)試的目標(biāo)是驗(yàn)證小部件的UI外觀和交互是否符合預(yù)期。

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

集成測(cè)試:測(cè)試整個(gè)應(yīng)用程序或應(yīng)用程序的大部分。通常,集成測(cè)試可以在真實(shí)設(shè)備或操作系統(tǒng)模擬器(如iOS模擬器或Android模擬器)上運(yùn)行。測(cè)試中的應(yīng)用程序通常與測(cè)試驅(qū)動(dòng)程序代碼隔離,以避免結(jié)果偏差。集成測(cè)試的目標(biāo)是驗(yàn)證應(yīng)用程序作為一個(gè)整體是否正確運(yùn)行,以及它所包含的所有小部件是否按預(yù)期相互集成。還可以使用集成測(cè)試來(lái)驗(yàn)證應(yīng)用程序的性能。

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

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

dev_dependencies:
  flutter_test:
    sdk: flutter

即使的測(cè)試本身沒(méi)有顯式導(dǎo)入到flatter_test中,因?yàn)闇y(cè)試框架本身在后臺(tái)使用它。 要運(yùn)行測(cè)試,請(qǐng)從項(xiàng)目目錄(而不是測(cè)試子目錄)運(yùn)行fluttertesttest/unit _ test.dart 要運(yùn)行所有測(cè)試,請(qǐng)從項(xiàng)目目錄運(yùn)行顫振測(cè)試。

集成測(cè)試

Flutter的是:命令行 A包:flatter_ driver(API) 兩者都允許:為集成測(cè)試創(chuàng)建指導(dǎo)應(yīng)用程序,編寫測(cè)試,運(yùn)行測(cè)試

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

集成測(cè)試是一個(gè)簡(jiǎn)單的包:測(cè)試測(cè)試。它使用Flutter驅(qū)動(dòng)程序API告訴應(yīng)用程序要執(zhí)行什么操作,然后驗(yàn)證應(yīng)用程序是否執(zhí)行了此操作。 出于興趣,我們還讓測(cè)試記錄性能時(shí)間線。我們創(chuàng)建了一個(gè)user_ list_ scrolling_ test.dart測(cè)試文件位于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) {
        // 關(guān)閉連接
        driver.close();
      }
    });

構(gòu)建--目標(biāo)應(yīng)用程序并將其安裝在設(shè)備上 啟動(dòng)應(yīng)用程序 在driver/_ list_ scrolling_ test.dart下運(yùn)行my_ app/test_ User 可能想知道該命令如何找到正確的測(cè)試文件。flutter drive命令使用約定在與--target應(yīng)用程序相同的目錄中查找具有相同文件名的文件,但帶有帶有測(cè)試后綴的_Test文件。

彈性框本身(行和列)的行為是不同的,這取決于它們?cè)诮o定方向上是有邊界的還是無(wú)邊界的。 在邊界限制下,它們將盡可能大。 它們?cè)噲D使其子節(jié)點(diǎn)在沒(méi)有邊界限制的情況下適應(yīng)此方向。在這種情況下,不能將子節(jié)點(diǎn)的flex屬性設(shè)置為0以外的任何值(默認(rèn)值為0)。在小部件庫(kù)中,這意味著當(dāng)彈性框位于另一個(gè)彈性框或可滾動(dòng)框內(nèi)時(shí),不能使用Expanded。如果執(zhí)行此操作,將收到異常消息。 在交叉方向上,例如Column的寬度和Row的高度,它們不能是無(wú)邊界的,否則它們將無(wú)法合理地對(duì)齊子節(jié)點(diǎn)。

 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));

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

   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));
        }

應(yīng)用程序構(gòu)建函數(shù)返回的子小部件的渲染框被分配了一個(gè)約束,迫使它精確地填充應(yīng)用程序的內(nèi)容區(qū)域(通常是整個(gè)屏幕)。Flutter中的許多框,特別是那些只包含一個(gè)子控件的框,會(huì)將其約束傳遞給其子控件。這意味著,如果在應(yīng)用程序渲染樹(shù)的根處嵌套一些框,則所有子節(jié)點(diǎn)都受這些渲染框的約束。

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

以上就是大型項(xiàng)目里Flutter測(cè)試應(yīng)用實(shí)例集成測(cè)試深度使用詳解的詳細(xì)內(nèi)容,更多關(guān)于Flutter集成測(cè)試的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

最新評(píng)論