检查应用程序是否在测试环境中运行

时间:2019-10-16 06:54:13

标签: flutter dart

只是想知道我是否可以确定我的应用程序当前是否在“测试”环境中运行。 原因是我正在运行自动屏幕截图,并且只想在运行该UI测试时隐藏/修改我的App的某些部分。

例如,我想跳过注册推送通知,以避免启动时出现该iOS弹出窗口。

我正在寻找类似的东西

if (kTestingMode) { ... } 

我知道我们确实有一个驱动程序,该驱动程序基本上可以启动应用程序,然后进行连接。猜猜该应用程序实际上甚至不知道它是否在测试模式下运行。但是也许有人知道答案。

谢谢!

4 个答案:

答案 0 :(得分:1)

另一种解决方案是使用--dart-define构建环境变量。它可以从Flutter 1.17

获得

使用--dart-define运行测试的示例:

flutter drive --dart-define=testing_mode=true --target=test_driver/main.dart

在代码中,您可以使用以下代码检查此环境变量:

const bool.fromEnvironment('testing_mode', defaultValue: false)

不使用const会导致无法在移动设备上读取该变量,请参见here

答案 1 :(得分:0)

好的,我自己找到了一个解决方案。 我所做的是引入一个全局变量,该变量将在主驱动程序中设置。

首先,我创建了一个新的globals.dart文件:

library my_prj.globals;

bool testingActive = false;

然后,在我的test_driver/main.dart文件中导入该文件,并将testingActive变量设置为true

import '../lib/globals.dart' as globals;

..

void main() {
  final DataHandler handler = (_) async {
    final response = {};
    return Future.value(c.jsonEncode(response));
  };
  // Enable integration testing with the Flutter Driver extension.
  // See https://flutter.io/testing/ for more info.
  enableFlutterDriverExtension(handler: handler);

  globals.testingActive = true;

  WidgetsApp.debugAllowBannerOverride = false; // remove debug banner
  runApp(App());
} 

现在,仅通过导入和检查,我的Flutter App中到处都有这个全局变量。

例如在我的app.dart

import '../globals.dart' as globals;

...

if (globals.testingActive) {
   print("We are in a testing environment!");
}

有更好的解决方案吗?猜猜这很好用!

答案 2 :(得分:0)

我对此有另一种解决方案,也许这对您也可行。让我知道这是否适合您。

1。因此,我建议使用assert(),因为它仅在调试模式下运行。

以下是导航器的示例:

assert(() {
  if (navigator == null && !nullOk) {
    throw new FlutterError(
      'Error!!!'
    );
  }
  return true;
}());

注意:特别是调用结束时的()-assert只能对布尔值进行操作,因此仅传递函数是无效的。

2。。另一种方法是使用软件包kReleaseMode中的package:flutter/foundation.dart

kReleaseMode是一个常数。因此,编译器能够正确删除未使用的代码,我们可以放心地这样做:

import 'package:flutter/foundation.dart' as Foundation;

//is release mode
if (Foundation.kReleaseMode) {
  print('release mode');
} else {
  print('debug mode');
}

3。。这是对您有帮助的代码段:

bool get isInDebugMode {
  bool inDebugMode = false;
  assert(inDebugMode = true);
  return inDebugMode;
}

如果没有,则可以将IDE配置为在调试模式下启动另一个main.dart,在其中可以设置布尔值。

答案 3 :(得分:0)

一些答案​​旨在检测您是否处于调试模式。问题是关于如何检测是否在测试环境中,而不是如何在调试模式下。实际上,在运行测试时,您处于调试模式,但是即使不运行测试,也可以在调试模式下运行应用程序。

为了正确检测您是否正在运行测试,可以在Platform.environment中检查密钥FLUTTER_TEST的存在。

import 'dart:io' show Platform;

if (Platform.environment.containsKey('FLUTTER_TEST')) { ... }