无法在颤动中模拟单例类

Posted

技术标签:

【中文标题】无法在颤动中模拟单例类【英文标题】:Not able to mock singleton class in flutter 【发布时间】:2019-07-30 03:28:06 【问题描述】:

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

【问题讨论】:

【参考方案1】:

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

class MySingleton 
  static final MySingleton value = MySingleton.();

  MySingleton._();


class MySingletonHelper 
  MySingleton get value => MySingleton.value;

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

import 'package:meta/meta.dart';

class MySingleton 
  static MySingleton _value = MySingleton.();

  static MySingleton value => get _value;

  @visibleForTesting
  static set value(MySingleton val) => _value = val; 

  MySingleton._();

【讨论】:

你能告诉我一种使用工厂构造函数的方法吗?可以吗 在 dart 中使用 factory 关键字并让构造函数返回它的实例 ***.com/questions/25756593/… 中的问题显示了一个工厂构造函数(类似于dartlang.org/guides/language/language-tour#factory-constructors)还有***.com/questions/12649573/…

以上是关于无法在颤动中模拟单例类的主要内容,如果未能解决你的问题,请参考以下文章

请问java 单例类 与 静态类 有何不同?

Java单例模式详解

Python单例模式的实现方式

23种设计模式之单例模式

如何使用 Mockito/Powermock 模拟枚举单例类?

java设计模式之单例模式