我想弄清楚如何为Flutter和Dart中的单元测试修改静态 setter/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';
}
我想修改一个类的静态获取方法的返回值:我想针对不同的测试用例调整
Platform.isIOS
和Platform.isAndroid
的返回值。请注意,我知道此问题的解决方法,例如,我可以将函数拆分为两个函数(每个平台一个),可以注入(inject)自己的
enum
(或者在这种情况下,甚至bool
都可以工作)来表示支持的平台。在此示例中,我实际上将这样做,但是我想知道如何“修改” Platform
类的getter的返回值,因为有时您不希望像其他方法一样修改函数的签名。可能取决于它,但是,您仍然想对功能进行单元测试。 最佳答案
您不应该 mock 您不拥有的类。您的单元测试必须与平台无关。根据您的情况,您应该重构代码以摆脱这种依赖性。
如果您真的想继续这种依赖关系,则至少取决于抽象:
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/