我想弄清楚如何为我在 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';
}
我想修改一个类的静态 getter 的返回值:我想调整
Platform.isIOS
和 Platform.isAndroid
不同测试用例的返回值。请注意,我知道此问题的解决方法,例如,我可以将函数拆分为两个函数(每个平台一个),我可以注入(inject)自己的
enum
(或者在这种情况下,甚至 bool
也可以工作)代表支持的平台。在这个例子中,我实际上打算这样做,但我想知道如何“修改”Platform
的返回值。类的 setter/getter ,因为有时,您不想修改函数的签名,因为其他人可能依赖它,但是,您仍然想对函数进行单元测试。
最佳答案
你不应该模拟你不拥有的类(class)。您的单元测试必须独立于平台。在您的情况下,您应该重构代码以摆脱这种依赖关系。
如果你真的想继续这种依赖,至少取决于抽象:
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
关于unit-testing - 如何在 Dart 或 Flutter 中模拟静态 getter 的返回值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59592097/