Vin*_*rga 6 platform unit-testing mockito dart flutter
我想弄清楚如何修改 Flutter 和 Dart 中单元测试的静态 getter 的返回值。
我正在对一个简单的功能进行单元测试:
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';
}
Run Code Online (Sandbox Code Playgroud)
我想修改类的静态 getter 的返回值:我想调整Platform.isIOS不同Platform.isAndroid测试用例的返回值。
请注意,我知道这个问题的解决方法,例如,我可以将函数拆分为两个函数(每个平台一个),我可以注入我自己的函数enum(或者在这种情况下,甚至bool可以工作)来代表受支持的平台。在这个例子中,我实际上打算这样做,但我想知道如何“修改”类的Platformgetter 的返回值,因为有时,您不想像其他人那样修改函数的签名依赖它,但您仍然想对该函数进行单元测试。
您不应该模拟不属于您的类。您的单元测试必须独立于平台。根据您的情况,您应该重构代码以摆脱这种依赖性。
如果你真的想继续这种依赖,至少取决于抽象:
abstract class MyPlatform {
bool isAndroid();
bool isIos();
}
class MyPlatformImp implements MyPlatform {
@override
bool isAndroid() => Platform.isAndroid;
@override
bool isIos() => Platform.isIOS;
}
Run Code Online (Sandbox Code Playgroud)
然后您可以根据您的用途模拟 MyPlatform。
您将在集成测试中测试这种变量 https://flutter.dev/docs/cookbook/testing/integration/introduction
您还可以使用 test() 的 onPlatform 属性为平台创建不同的测试 https://api.flutter.dev/flutter/test_api/test.html
| 归档时间: |
|
| 查看次数: |
4485 次 |
| 最近记录: |