testing - 如何在 Dart/Flutter 中测试 void 静态方法?
问题描述
我正在尝试对具有静态 void 方法的类进行单元测试。
我正在使用 Mockito (verify) 来检查 void 方法是否按预期调用另一个函数,但它不适用于静态方法。
class SystemUtils {
// ...
static void handleError(bool isDebug, FlutterErrorDetails details) {
if (isDebug) {
FlutterError.dumpErrorToConsole(details);
} else {
Crashlytics.instance.onError(details);
}
}
}
解决方案
我解决了改变班级。
该方法不再是静态的,现在我在构造函数中接收外部方法作为默认值。
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/cupertino.dart';
class SystemUtils {
SystemUtils({
debugErrorHandler,
releaseErrorHandler,
}) : _debugErrorHandler =
debugErrorHandler ?? FlutterError.dumpErrorToConsole,
_releaseErrorHandler =
releaseErrorHandler ?? Crashlytics.instance.onError;
final void Function(FlutterErrorDetails) _debugErrorHandler;
final void Function(FlutterErrorDetails) _releaseErrorHandler;
static bool isInDebugMode() {
bool inDebugMode = false;
assert(inDebugMode = true);
return inDebugMode;
}
void handleError(bool isDebug, FlutterErrorDetails details) {
if (isDebug) {
_debugErrorHandler(details);
} else {
_releaseErrorHandler(details);
}
}
}
现在我可以在需要时替换构造函数上的方法(例如在测试中)。
group('handleError', () {
test('should call _debugErrorHandler if isDebug is true', () {
const isDebug = true;
const details = FlutterErrorDetails(exception: 'error exception');
void debugErrorHandler(FlutterErrorDetails localDetails) {
expect(localDetails, details);
}
final SystemUtils systemUtils = SystemUtils(debugErrorHandler: debugErrorHandler);
systemUtils.handleError(isDebug, details);
});
});
但我仍然想知道是否可以在 Dart 中测试 void 静态方法。
推荐阅读
- vba - Excel VBA上的递归搜索
- sql-server - SQL Server 日志传送配置屏幕
- java - 检查两个元素是否都在同一个类中
- sql - 创建具有自动增量列的表?
- postman - 无法从邮递员访问 AWS SQS api
- symfony - Symfony3 FosUser 和 FosAuthServer,在 AuthenticationFailureHandler 上使用 LDAP 登录用户
- python - 在 Python 中使用子进程,在 Python cmd 和 Python IDLE 中我得到不同的结果
- python - Dash-Plotly 应用程序身份验证 - 登录详细信息另存为 Cookie/Heroku 托管的“类型”对象错误
- javascript - 捕捉 window.open() 错误
- apache-spark - Spark 执行器需要驱动程序内存