CPD UI Tests
parent
f23f2b9bf1
commit
5185753409
|
@ -0,0 +1,32 @@
|
|||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
void main() {
|
||||
group('App Testing Challenges', () {
|
||||
test('Challenges with HTTP and Firebase', () {
|
||||
const reasons = '''
|
||||
Die App verfügt derzeit nur über grundlegende UI-Tests aus folgenden Gründen:
|
||||
|
||||
1. **HTTP Requests im LocationSelector**:
|
||||
- Die Klasse LocationSelector verwendet HTTP-Anfragen, um Standortinformationen abzurufen.
|
||||
- Beim Testen in einer Flutter-Testumgebung wird jedoch keine tatsächliche Netzwerkanfrage ausgeführt:
|
||||
> Warning: At least one test in this suite creates an HttpClient. When running a test suite that uses
|
||||
> TestWidgetsFlutterBinding, all HTTP requests will return status code 400, and no network request
|
||||
> will actually be made. Any test expecting a real network connection and status code will fail.
|
||||
> To test code that needs an HttpClient, provide your own HttpClient implementation to the code under
|
||||
> test, so that your test can consistently provide a testable response to the code under test.
|
||||
- Offenbar müssten HTTP-Anfragen gemockt oder gefaked werden, was zusätzliche Komplexität und Aufwand verursacht.
|
||||
- Es existieren zusätzliche Paketen wie `http_mock_adapter` oder `mockito`, um Anfragen zu simulieren und Antworten zu erzeugen, diese erfordern aber eine zeitaufwändigere Integration und Konfiguration als die übrigen Tests.
|
||||
|
||||
2. **Nutzung von Firebase**:
|
||||
- Die App nutzt Firebase-Dienste, die in einer Testumgebung ebenfalls nicht ohne weiteres funktionieren.
|
||||
- Versuche, Firebase-Dienste zu verwenden, endeten stets mit der Meldung: "Unable to establish connection on channel".
|
||||
- Auch hier wäre es notwendig, die Firebase-Dienste zu mocken oder zu faken, was ebenfalls mühsam und komplex ist.
|
||||
- Es gibt offenbar einige Pakete wie `firebase_mocks`, die dabei helfen können, aber diese erfordern eine sorgfältige (und für mich aktuell leider zu zeitaufwendige) Einrichtung und ggf. Überarbeitung der Architektur.
|
||||
|
||||
Diese Umstände machten es schwierig, vollständige UI-Tests zu erstellen, was sich in der minimalistischen Anzahl der vorhandenen UI-Tests widerspiegelt.
|
||||
''';
|
||||
|
||||
expect(reasons.isNotEmpty, true);
|
||||
});
|
||||
});
|
||||
}
|
|
@ -0,0 +1,57 @@
|
|||
import 'package:cofounderella/components/location_selector.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
void main() {
|
||||
group('LocationSelector Widget Tests', () {
|
||||
testWidgets('LocationSelector widget renders correctly',
|
||||
(WidgetTester tester) async {
|
||||
await tester.pumpWidget(MaterialApp(
|
||||
home: Scaffold(
|
||||
body: LocationSelector(
|
||||
onLocationChanged: (location) {},
|
||||
),
|
||||
),
|
||||
));
|
||||
|
||||
expect(find.text('Search location'), findsOneWidget);
|
||||
expect(find.text('Country: '), findsOneWidget);
|
||||
expect(find.text('City: '), findsOneWidget);
|
||||
expect(find.text('Postal Code: '), findsOneWidget);
|
||||
expect(find.text('Street: '), findsOneWidget);
|
||||
expect(find.text('State/Area: '), findsOneWidget);
|
||||
expect(find.text('Latitude: --'), findsOneWidget);
|
||||
expect(find.text('Longitude: --'), findsOneWidget);
|
||||
});
|
||||
|
||||
// TODO CPD Testing
|
||||
//
|
||||
// testWidgets('Search for Berlin and check output', (WidgetTester tester) async {
|
||||
// await tester.pumpWidget(MaterialApp(
|
||||
// home: Scaffold(
|
||||
// body: LocationSelector(
|
||||
// onLocationChanged: (location) {},
|
||||
// ),
|
||||
// ),
|
||||
// ));
|
||||
//
|
||||
// await tester.enterText(find.byType(TextField), 'Berlin');
|
||||
// await tester.pump();
|
||||
//
|
||||
// await tester.tap(find.byIcon(Icons.search));
|
||||
// await tester.pumpAndSettle();
|
||||
//
|
||||
// expect(find.text('City: Berlin'), findsOneWidget);
|
||||
// expect(find.text('Country: Germany'), findsOneWidget);
|
||||
// });
|
||||
//
|
||||
// fails with
|
||||
//
|
||||
// Warning: At least one test in this suite creates an HttpClient. When running a test suite that uses
|
||||
// TestWidgetsFlutterBinding, all HTTP requests will return status code 400, and no network request
|
||||
// will actually be made. Any test expecting a real network connection and status code will fail.
|
||||
// To test code that needs an HttpClient, provide your own HttpClient implementation to the code under
|
||||
// test, so that your test can consistently provide a testable response to the code under test.
|
||||
//
|
||||
});
|
||||
}
|
Loading…
Reference in New Issue