我在Dart类中有一个方法,它接受< code>BuildContext参数,如下所示:
class MyClass {
<return_type> myMethodName(BuildContext context, ...) {
...
doSomething
return something;
}
}
我想测试该方法是否按预期工作:
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mockito/mockito.dart';
...
void main() {
MyClass sut;
setUp(() {
sut = MyClass();
});
test('me testing', () {
var actual = sut.myMethodName(...);
expect(actual, something);
});
}
当然,它不起作用,因为方法 myMethodName
需要一个参数 构建上下文
类型。此值在整个应用程序本身中都可用,但不确定在我的单元测试中从何处获取该值。
以下是在测试用例中检索 BuildContext 实例的简单方法:
testWidgets('showDialog', (WidgetTester tester) async {
await tester.pumpWidget(MaterialApp(home: Material(child: Container())));
final BuildContext context = tester.element(find.byType(Container));
final dialog = showDialog(
context: context,
builder: (context) => AlertDialog(
content: Text('shown by showDialog'),
),
);
// apply your tests to dialog or its contents here.
});
这是受show Dialog()
函数的Flutter测试用例中的简单对话控制测试的启发。
整个“应用程序”由容器
小部件和材料应用程序
框架组成。通过查找与容器
相关的元素
实例来检索构建上下文
实例。
您实际上可以模拟BuildContext
,因此测试将无头运行。我认为这更好,但可能不是您正在寻找的解决方案。
BuildContext
是一个抽象类,因此无法实例化。任何抽象类都可以通过创建该类的实现来模拟。如果我以您为例,那么代码将如下所示:
class MockBuildContext extends Mock implements BuildContext {}
void main() {
MyClass sut;
MockBuildContext _mockContext;
setUp(() {
sut = MyClass();
_mockContext = MockBuildContext();
});
test('me testing', () {
var actual = sut.myMethodName(_mockContext, ...);
expect(actual, something);
});
}
(请注意,这需要莫基托包:https://pub.dev/packages/mockito。
一种方法是将< code>testWidgets与< code>Builder小部件结合使用:
testWidgets('me testing', (WidgetTester tester) async {
await tester.pumpWidget(
Builder(
builder: (BuildContext context) {
var actual = sut.myMethodName(context, ...);
expect(actual, something);
// The builder function must return a widget.
return Placeholder();
},
),
);
});
我正在使用firebase云功能向特定用户发送通知。这是我从函数发送的有效负载。 我正在使用firebase_messaging(flutter package:https://pub.dartlang.org/packages/firebase_messaging)接收通知,并且我已经编写了onMessage、onLaunch和onResume方法的代码。 因此,当我使用Admin SDK发送消
目前我正在尝试颤振网页,我需要在颤振主频道工作。但是,后来我需要继续我的其他项目。在他们身上,我正在研究颤振稳定通道。 但是,每当我使用命令“flutter channel stable”或“fluter channel master”切换我的flutter通道时,它每次都会重新下载sdk和其他工具。 目前,我已经下载了稳定的颤振sdk和稳定的dart sdk。 我已将它们移动到“FlutterS
我可以使用“startAfter”和“limit”进行分页,但它有错误。 例如,在Firestore DB中,我有7条记录: 当页面大小为5时,第一页就可以了,因为我使用了: 它给了我1-5项。 当它加载第二页时,我使用了: 问题是第二页结果只有item7,item6消失了。“开始”也有同样的问题。 真希望它有“抵消”功能,有人有解决办法吗?
我有一个方法,如果名称与正则表达式匹配,则必须返回true,如果名称具有特殊字符或数字,则必须返回null。 这是方法: 这是对无法通过的方法的测试:
正在启动lib\main。IA Emulator上AOSP上的dart处于调试模式。。。正在运行Gradle任务“assembleDebug”。。。警告:插件路径_provider_android需要android SDK版本31。警告:插件共享的_首选项_android需要android SDK版本31。一个或多个插件需要更高的Android SDK版本。通过将以下内容添加到D:\App Dev
Xcode的输出:在文件中包含从 /Users/dani/development/flutter/.pub-cache/hosted/pub.dartlang.org/url_launcher-6.0.3/ios/Classes/FLTURLLauncherPlugin.m: 7: /Users/dani/development/flutter/.pub-cache/hosted/pub.dart