![](/img/trans.png)
[英]How can I test a single void method inside a class with PHPUnit?
[英]How can I test a void static method in Dart/Flutter?
我正在嘗試對具有靜態 void 方法的類進行單元測試。
我正在使用 Mockito(驗證)來檢查 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 靜態方法。
我認為你在尋找什么(例如):
待測試代碼:
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>()));
});
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.