无法在颤动中模拟单例类

Gag*_*cha 10 dart dart-pub flutter flutter-test

我创建了一个类作为单例,创建一个静态方法来获取该类的实例,但是在单元测试时我无法模拟该类。dart 中是否有其他方法可以仅创建单个实例并且可以轻松进行单元测试。

Gün*_*uer 11

根据您的具体要求,有不同的方法。
您可以使用附加类来访问单例,您可以在其中创建多个实例,同时仍然保证它允许访问的值将是单例:

class MySingleton {
  static final MySingleton value = MySingleton.();
  
  MySingleton._();
}

class MySingletonHelper {
  MySingleton get value => MySingleton.value;
}
Run Code Online (Sandbox Code Playgroud)

或替代方法使用@visibleForTesting的限制是单例值不能,final并且写访问仅受 DartAnalyzer 限制,但不受编译器限制(我不认为这是一个严重的限制):

import 'package:meta/meta.dart';

class MySingleton {
  static MySingleton _value = MySingleton.();

  static MySingleton get value => _value;

  @visibleForTesting
  static set value(MySingleton val) => _value = val; 
  
  MySingleton._();
}
Run Code Online (Sandbox Code Playgroud)