我想弄清楚如何为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.isIOS
和Platform.isAndroid
的返回值。
[请注意,我知道此问题的解决方法,例如,我可以将函数拆分为两个函数(每个平台一个),可以注入自己的enum
(在这种情况下,甚至可以插入bool
可能有效)代表受支持的平台。在此示例中,我实际上将要执行此操作,但是我想知道如何“修改” Platform
类的getter的返回值,因为有时您不想修改函数的签名,因为其他人可能会依赖它,但是,您仍然想对功能进行单元测试。
您不应该嘲笑您不拥有的类。您的单元测试必须独立于平台。对于您的情况,您应该重构代码以摆脱这种依赖性。
如果您真的想继续这种依赖关系,则至少取决于抽象:
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