我正在尝试对具有静态void方法的类进行单元测试。
我正在使用Mockito(验证)检查void方法是否按预期方式调用了另一个函数,但是不适用于静态方法。
class SystemUtils {
// ...
static void handleError(bool isDebug, FlutterErrorDetails details) {
if (isDebug) {
FlutterError.dumpErrorToConsole(details);
} else {
Crashlytics.instance.onError(details);
}
}
}
答案 0 :(得分:0)
我解决了换班的问题。
该方法不再是静态的,现在我在构造函数中接收到外部方法作为默认值。
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静态方法。
答案 1 :(得分:0)
我认为您正在寻找的内容(示例):
要测试的代码:
class TestExpect {
static void noParameter() {
bool inDebugMode = false;
assert(inDebugMode = false);
}
static void hasParameter(bool toBeIgnored) {
bool inDebugMode = false;
assert(inDebugMode = false);
}
}
单元测试代码:
void main() {
test('static void method', () {
expect(TestExpect.noParameter, throwsA(isA<AssertionError>()));
});
test('static void method parameter', () {
expect(() => TestExpect.hasParameter(true), throwsA(isA<AssertionError>()));
});
}