为啥 ApplicationsDocumentsDirectory 为单元测试返回 null?

Posted

技术标签:

【中文标题】为啥 ApplicationsDocumentsDirectory 为单元测试返回 null?【英文标题】:Why ApplicationsDocumentsDirectory return null for unit test?为什么 ApplicationsDocumentsDirectory 为单元测试返回 null? 【发布时间】:2019-10-03 03:34:15 【问题描述】:

我正在使用颤振“path_provider”插件。我需要一个 SQLite 操作。我的错误测试类没有找到“getApplicationDocumentsDirectory”并返回 null。 该应用程序在模拟器/真实设备上运行任何工作都没有问题。

正在寻找提供者存储库和测试文件夹。我已经厌倦了测试类示例,但错误仍然存​​在。

  const MethodChannel channel =
      MethodChannel('plugins.flutter.io/path_provider');

  channel.setMockMethodCallHandler((MethodCall methodCall) async 
    log.add(methodCall);
    return response;
  );

  test('user save data', () async 
    var response = null;
//FIXME : directory return null
    final Directory directory = await getApplicationDocumentsDirectory();
    final model = UserWordInformation();
    model.word = word;
    model.know = 1;
    final result = await dbHelper.insert(model.toMap());
    expect(result, 1);
  );

我希望设备的返回路径文件夹。某些路径:“/Users/vb/Library/Developer/CoreSimulator/Devices/C5B3C94C-C774-4D0E-A19C-97AAF11BD9E3/data/Containers/Data/Application/0508712B-A138 -483A-921E-B5EAE6DF149F/文档"

【问题讨论】:

【参考方案1】:

也许你忘记初始化你的 response 变量。

在我的一个单元测试中,getApplicationDocumentsDirectory 遇到了类似的问题。

MissingPluginException(在通道 plugins.flutter.io/path_provider 上找不到方法 getApplicationDocumentsDirectory 的实现)

在单元测试文件中添加如下代码:

const MethodChannel channel = MethodChannel('plugins.flutter.io/path_provider');
channel.setMockMethodCallHandler((MethodCall methodCall) async 
  return ".";
);

现在它终于起作用了。 希望这会有所帮助。

【讨论】:

我想拥抱你 我还必须添加TestWidgetsFlutterBinding.ensureInitialized()【参考方案2】:

这个问题一般是因为缺少依赖,你的pubspec.yaml有以下依赖?

依赖:

  path_provider: ^1.2.0

  simple_permissions: ^0.1.9

如果 simple_permissions: ^0.1.9 在构建时抛出错误,请尝试使用此依赖项:

path_provider: ^1.2.0

permission_handler: ^3.2.0

【讨论】:

以上是关于为啥 ApplicationsDocumentsDirectory 为单元测试返回 null?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 DataGridView 上的 DoubleBuffered 属性默认为 false,为啥它受到保护?

为啥需要softmax函数?为啥不简单归一化?

为啥 g++ 需要 libstdc++.a?为啥不是默认值?

为啥或为啥不在 C++ 中使用 memset? [关闭]

为啥临时变量需要更改数组元素以及为啥需要在最后取消设置?

为啥 CAP 定理中的 RDBMS 分区不能容忍,为啥它可用?