如何在Dart或Flutter中模拟静态获取器的返回值?

问题描述 投票:0回答:1

我想弄清楚如何为Flutter和Dart中的单元测试修改静态吸气剂的返回值。

我正在对一个简单的功能进行单元测试:

  Future<bool> exampleFunc() async {
    if (Platform.isIOS) {
      // Do some iOS-specific things
      return false;
    } else if (Platform.isAndroid) {
      // Do some Android-specific things
      return true; // just as an example
    }
    throw 'Unexpected platform';
  }

而且我想修改一个类的静态获取方法的返回值:我想针对不同的测试用例调整Platform.isIOSPlatform.isAndroid的返回值。

[请注意,我知道此问题的解决方法,例如,我可以将函数拆分为两个函数(每个平台一个),可以注入自己的enum(在这种情况下,甚至可以插入bool可能有效)代表受支持的平台。在此示例中,我实际上将要执行此操作,但是我想知道如何“修改” Platform类的getter的返回值,因为有时您不想修改函数的签名,因为其他人可能会依赖它,但是,您仍然想对功能进行单元测试。

unit-testing flutter dart mockito platform
1个回答
0
投票

您不应该嘲笑您不拥有的类。您的单元测试必须独立于平台。对于您的情况,您应该重构代码以摆脱这种依赖性。

如果您真的想继续这种依赖关系,则至少取决于抽象:

abstract class MyPlatform {
  bool isAndroid();
  bool isIos();
 }

class MyPlatformImp implements MyPlatform {
  @override
  bool isAndroid() => Platform.isAndroid;
  @override
  bool isIos() => Platform.isIOS;
 }

然后您可以在使用时模拟MyPlatform。

您将在集成测试中测试的此类变量https://flutter.dev/docs/cookbook/testing/integration/introduction

您还可以使用test()的onPlatform属性为平台创建不同的测试https://api.flutter.dev/flutter/test_api/test.html

© www.soinside.com 2019 - 2024. All rights reserved.