generate static method

String generate({
  1. required String className,
  2. required String importPath,
  3. required List<String> methods,
  4. bool isTopLevel = false,
  5. String? mockClassName,
  6. String? mockImportPath,
})

Generates a complete unit test file for a service/repository/controller.

Implementation

static String generate({
  required String className,
  required String importPath,
  required List<String> methods,
  bool isTopLevel = false,
  String? mockClassName,
  String? mockImportPath,
}) {
  final buffer = StringBuffer();

  // Imports
  buffer.writeln("import 'package:flutter_test/flutter_test.dart';");
  if (mockImportPath != null) {
    buffer.writeln("import 'package:mocktail/mocktail.dart';");
  }
  buffer.writeln("import '$importPath';");
  buffer.writeln();

  // Mock class (if applicable)
  if (mockClassName != null) {
    buffer.writeln(
        'class Mock$mockClassName extends Mock implements $mockClassName {}');
    buffer.writeln();
  }

  // Main
  buffer.writeln('void main() {');
  buffer.writeln("  group('$className', () {");

  if (!isTopLevel) {
    buffer.writeln('    late $className sut;');
    buffer.writeln();

    // setUp
    buffer.writeln('    setUp(() {');
    buffer.writeln('      sut = $className();');
    buffer.writeln('    });');
    buffer.writeln();

    // Test: initialization
    buffer.writeln("    test('should be instantiated', () {");
    buffer.writeln('      expect(sut, isNotNull);');
    buffer.writeln('    });');
  }

  // Test stubs for each method
  for (final method in methods) {
    buffer.writeln();
    buffer.writeln("    test('$method works correctly', () {");
    buffer.writeln('      // TODO: Arrange');
    buffer.writeln();
    buffer.writeln('      // TODO: Act');
    if (isTopLevel) {
      buffer.writeln('      // final result = $method();');
    } else {
      buffer.writeln('      // final result = sut.$method();');
    }
    buffer.writeln();
    buffer.writeln('      // TODO: Assert');
    buffer.writeln('      // expect(result, expectedValue);');
    buffer.writeln('    });');
  }

  buffer.writeln('  });');
  buffer.writeln('}');

  return buffer.toString();
}