Integrate logging system into Flutter app with service registration and testing setup

This commit is contained in:
2025-09-21 11:03:06 +02:00
parent daaaed47c4
commit 5572c66b10
9 changed files with 273 additions and 12 deletions

View File

@@ -1,12 +1,37 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:fluttery/fluttery.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:fluttery/logger/logger.dart';
import 'package:fluttery/src/logger/logger_impl.dart';
import 'package:kiwi/kiwi.dart';
import 'mocks/mocks.dart';
void main() {
test('adds one to input values', () {
final calculator = Calculator();
expect(calculator.addOne(2), 3);
expect(calculator.addOne(-7), -6);
expect(calculator.addOne(0), 1);
group('App Service Tests', () {
// Clear the singleton state before each test to ensure isolation
setUp(() {
// KiwiContainer provides a clear method to remove all registered services
KiwiContainer().clear();
});
test('should register and resolve a custom service', () {
// Register a mock logger service
final mockLogger = MockLogger();
App.registerService<Logger>(() => mockLogger);
// Resolve the service and check if it's the same instance
final resolvedLogger = App.service<Logger>();
expect(resolvedLogger, isA<MockLogger>());
expect(resolvedLogger, same(mockLogger));
});
test('should register and resolve default services', () {
// Register default services
App.registerDefaultServices();
// Resolve the Logger service and check if it's an instance of LoggerImpl
final logger = App.service<Logger>();
expect(logger, isA<LoggerImpl>());
});
});
}

View File

@@ -0,0 +1,69 @@
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:logging/logging.dart' as lib;
import 'package:fluttery/src/logger/logger_impl.dart';
// Mock class for the lib.Logger
class MockLibLogger extends Mock implements lib.Logger {}
void main() {
final mockLibLogger = MockLibLogger();
group('LoggerImpl', () {
late LoggerImpl loggerImpl;
setUp(() {
loggerImpl = LoggerImpl.forTest(mockLibLogger);
});
test('info method logs an info message', () {
loggerImpl.info('Info message');
// Verify that the info method was called on the mock logger with the correct message
verify(() => mockLibLogger.info('Info message')).called(1);
});
test('warning method logs a warning message', () {
loggerImpl.warning('Warning message');
// Verify that the warning method was called on the mock logger with the correct message
verify(() => mockLibLogger.warning('Warning message')).called(1);
});
test('error method logs an error message with optional parameters', () {
final exception = Exception('Test exception');
final stackTrace = StackTrace.current;
loggerImpl.error('Error message', exception, stackTrace);
// Verify that the severe method was called on the mock logger with the correct parameters
verify(
() => mockLibLogger.severe('Error message', exception, stackTrace),
).called(1);
});
test('debug method logs a debug message', () {
loggerImpl.debug('Debug message');
// Verify that the fine method was called on the mock logger with the correct message
verify(() => mockLibLogger.fine('Debug message')).called(1);
});
test('setLogLevel method sets the logger level', () {
// This is to capture the change in the logger level
var capturedLevel = lib.Level.INFO;
// Capture the setter call
when(() => mockLibLogger.level = any()).thenAnswer((invocation) {
capturedLevel = invocation.positionalArguments.first as lib.Level;
return capturedLevel;
});
// Set the log level
loggerImpl.setLogLevel(lib.Level.WARNING);
// Verify that the logger level is set to the expected level
expect(capturedLevel, lib.Level.WARNING);
});
});
}

View File

@@ -0,0 +1,4 @@
import 'package:fluttery/logger/logger.dart';
import 'package:mocktail/mocktail.dart';
class MockLogger extends Mock implements Logger {}