Как протестировать Изолят
Запуск функции изолята в модульных тестах
При написании модульных тестов для Flutter-приложений часто возникает необходимость протестировать функции, выполняющиеся в изоляте. Изолят - это отдельный поток выполнения в Dart, который может выполняться параллельно с основным потоком. Однако тестирование таких функций может быть проблематичным.
Рассмотрим пример неправильного тестирования изолята:
Такой тест зависнет и никогда не завершится, поскольку функция
Решение: Используйте tester.runAsync() для запуска асинхронного кода в тесте:
Таким образом, вы сможете корректно протестировать функции, выполняющиеся в изоляте.
Оцените новую рубрику и напишите своё мнение! 👍💬
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #Testing #Isolate #FlutterTips #DartTips
Запуск функции изолята в модульных тестах
При написании модульных тестов для Flutter-приложений часто возникает необходимость протестировать функции, выполняющиеся в изоляте. Изолят - это отдельный поток выполнения в Dart, который может выполняться параллельно с основным потоком. Однако тестирование таких функций может быть проблематичным.
Рассмотрим пример неправильного тестирования изолята:
testWidgets('upload file and save avatar', (tester) async {
final file = await rootBundle.load('assets/images/splashscreen.png');
final bytes = file.buffer.asUint8List();
final xfile = XFile.fromData(bytes);
final jpgData = await compute(_avatarThumbnail, file);
}
// Функция, выполняющаяся в изоляте
Future<Uint8List> _avatarThumbnail(XFile file) {
return file.toJpeg(file, 300, 80);
}
Такой тест зависнет и никогда не завершится, поскольку функция
compute
запускает _avatarThumbnail в изоляте, но тест не ожидает завершения изолята.Решение: Используйте tester.runAsync() для запуска асинхронного кода в тесте:
testWidgets('upload file and save avatar', (tester) async {
await tester.runAsync(() async {
final file = await rootBundle.load('assets/images/splashscreen.png');
final bytes = file.buffer.asUint8List();
final xfile = XFile.fromData(bytes);
final jpgData = await compute(_avatarThumbnail, file);
});
});
// Функция, выполняющаяся в изоляте
Future<Uint8List> _avatarThumbnail(XFile file) {
return file.toJpeg(file, 300, 80);
}
Таким образом, вы сможете корректно протестировать функции, выполняющиеся в изоляте.
Оцените новую рубрику и напишите своё мнение! 👍💬
Все подобные новости можно найти по хэштегу #FlutterPulseTips
#flutter #dart #flutterpulse #FlutterPulseTips #MobileDevelopment #Testing #Isolate #FlutterTips #DartTips
👍1