網(wǎng)站首頁 編程語言 正文
測試應(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)用的功能越多,手動測試就越困難。一整套自動化測試將幫助確保應(yīng)用程序在發(fā)布前正確執(zhí)行,同時保持功能和錯誤修復(fù)速度。 有很多種自動化測試??偨Y(jié)如下: 單元測試:測試單個函數(shù)、方法或類。例如,被測試單元的外部依賴性通常是模擬的,例如package:mockito。單元測試通常不會讀取/寫入磁盤、呈現(xiàn)到屏幕或從運(yùn)行測試的進(jìn)程外部接收用戶操作。單元測試的目標(biāo)是驗(yàn)證邏輯單元在各種條件下的正確性。
await tester.tap(find.byKey(sliderKey));
expect(value, equals(0.5));
小部件測試:(在其他UI框架中稱為組件測試)用于測試的單個小部件。測試小部件涉及多個類,需要為測試環(huán)境提供適當(dāng)?shù)男〔考芷谏舷挛摹@?,它?yīng)該能夠接收和響應(yīng)用戶操作和事件,執(zhí)行布局,并實(shí)例化子部件。因此,Widget測試比單元測試更全面。然而,就像單元測試一樣,小部件測試環(huán)境被一個比完整UI系統(tǒng)簡單得多的實(shí)現(xiàn)所取代。小部件測試的目標(biāo)是驗(yàn)證小部件的UI外觀和交互是否符合預(yù)期。
testWidgets('my first widget test', (WidgetTester tester) async {
var sliderKey = new UniqueKey();
var value = 0.0;
集成測試:測試整個應(yīng)用程序或應(yīng)用程序的大部分。通常,集成測試可以在真實(shí)設(shè)備或操作系統(tǒng)模擬器(如iOS模擬器或Android模擬器)上運(yùn)行。測試中的應(yīng)用程序通常與測試驅(qū)動程序代碼隔離,以避免結(jié)果偏差。集成測試的目標(biāo)是驗(yàn)證應(yīng)用程序作為一個整體是否正確運(yùn)行,以及它所包含的所有小部件是否按預(yù)期相互集成。還可以使用集成測試來驗(yàn)證應(yīng)用程序的性能。
import 'package:test/test.dart';
void main() {
test('my first unit test', () {
var answer = 42;
expect(answer, 42);
});
}
一些Flutter庫(如dart:ui)在獨(dú)立dart VM附帶的dart SDK中不可用。此顫振測試命令允許在本地Dart VM中運(yùn)行測試,并使用顫振引擎而無需首頁(UI將不會顯示)。使用此命令,可以運(yùn)行任何測試,無論它是否取決于Flutter庫。 使用package:test編寫Flutter單元測試。用于編寫單元測試的package:test文檔在這里。
dev_dependencies: flutter_test: sdk: flutter
即使的測試本身沒有顯式導(dǎo)入到flatter_test中,因?yàn)闇y試框架本身在后臺使用它。 要運(yùn)行測試,請從項(xiàng)目目錄(而不是測試子目錄)運(yùn)行fluttertesttest/unit _ test.dart 要運(yùn)行所有測試,請從項(xiàng)目目錄運(yùn)行顫振測試。
集成測試
Flutter的是:命令行 A包:flatter_ driver(API) 兩者都允許:為集成測試創(chuàng)建指導(dǎo)應(yīng)用程序,編寫測試,運(yùn)行測試
import 'package:flutter_driver/driver_extension.dart';
void main() {
// 啟用擴(kuò)展
enableFlutterDriverExtension();
}
集成測試是一個簡單的包:測試測試。它使用Flutter驅(qū)動程序API告訴應(yīng)用程序要執(zhí)行什么操作,然后驗(yàn)證應(yīng)用程序是否執(zhí)行了此操作。 出于興趣,我們還讓測試記錄性能時間線。我們創(chuàng)建了一個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) {
// 關(guān)閉連接
driver.close();
}
});
構(gòu)建--目標(biāo)應(yīng)用程序并將其安裝在設(shè)備上 啟動應(yīng)用程序 在driver/_ list_ scrolling_ test.dart下運(yùn)行my_ app/test_ User 可能想知道該命令如何找到正確的測試文件。flutter drive命令使用約定在與--target應(yīng)用程序相同的目錄中查找具有相同文件名的文件,但帶有帶有測試后綴的_Test文件。
彈性框本身(行和列)的行為是不同的,這取決于它們在給定方向上是有邊界的還是無邊界的。 在邊界限制下,它們將盡可能大。 它們試圖使其子節(jié)點(diǎn)在沒有邊界限制的情況下適應(yīng)此方向。在這種情況下,不能將子節(jié)點(diǎn)的flex屬性設(shè)置為0以外的任何值(默認(rèn)值為0)。在小部件庫中,這意味著當(dāng)彈性框位于另一個彈性框或可滾動框內(nèi)時,不能使用Expanded。如果執(zhí)行此操作,將收到異常消息。 在交叉方向上,例如Column的寬度和Row的高度,它們不能是無邊界的,否則它們將無法合理地對齊子節(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));
這些約束有時是“緊”的,這意味著它們不會為渲染框留出空間來確定其自身的大小(例如,如果最小寬度和最大寬度相同,即寬度很窄)。主要示例是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));
}
應(yīng)用程序構(gòu)建函數(shù)返回的子小部件的渲染框被分配了一個約束,迫使它精確地填充應(yīng)用程序的內(nèi)容區(qū)域(通常是整個屏幕)。Flutter中的許多框,特別是那些只包含一個子控件的框,會將其約束傳遞給其子控件。這意味著,如果在應(yīng)用程序渲染樹的根處嵌套一些框,則所有子節(jié)點(diǎn)都受這些渲染框的約束。
summary.writeSummaryToFile('stocks_scroll_perf', pretty: true);
summary.writeTimelineToFile('stocks_scroll_perf', pretty: true);
原文鏈接:https://juejin.cn/post/7180726473433546808
相關(guān)推薦
- 2023-04-12 C++實(shí)現(xiàn)日期類的示例詳解_C#教程
- 2022-11-04 SQL?Server還原完整備份和差異備份的操作過程_MsSql
- 2022-07-30 Linux secure 日志分析
- 2023-03-26 rollup?cli開發(fā)全面系統(tǒng)性rollup源碼分析_其它
- 2022-04-18 react中在元素中插入多個類名, 多個狀態(tài)之間的類名切換等
- 2022-07-15 Qt項(xiàng)目打包的實(shí)現(xiàn)步驟_C 語言
- 2022-12-28 jQuery如何設(shè)置背景顏色_jquery
- 2022-07-30 Pandas處理時間序列數(shù)據(jù)操作詳解_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支