Resolvi assim:
Obtive o context a partir da widget Builder().
Porém tive que preparar a parte da tela semelhante ao aplicativo com um ElevatedButton só para chamar a função. Acredito que não era bem esse o objetivo da atividade.
void main() {
testWidgets('Icon Picker Test', (widgetTester) async {
IconData? icon;
await widgetTester.pumpWidget(
MaterialApp(
home: Builder(builder: (context) {
return ElevatedButton(
onPressed: () async {
icon = await showIconPicker(context: context);
},
child: const Text('Selecionar icone'),
);
}),
),
);
await widgetTester.pumpAndSettle();
await widgetTester.tap(find.text('Selecionar icone'));
await widgetTester.pumpAndSettle();
await widgetTester.tap(find.byIcon(Icons.credit_card));
await widgetTester.pumpAndSettle();
expect(icon, Icons.credit_card);
});
}
Gostaria de ver uma solução que testasse apenas a função sem a dependência de ter que criar um ElevatedButton no teste.