簡體   English   中英

如何在 Dart/Flutter 中測試 void 靜態方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM