Mock class that implements another class which uses Equatable

444 Views Asked by At

I faced a problem while mocking a class for testing. The problem is my class extends euqatable. And when I try to mock it I see the warning: Don't implement classes that override "==". I'm searching for a solution that solves this warning without using ignore or completely filling up models using super as it's recommended in avoid_implementing_value_types rule doc. Just creating mock as it usually is with some small additional code snippet. Here is the example of the code that causes the warning:

class MyEquatableClass extends Equatable {
  @override
  List<Object?> get props => [];
}

class MockMyEquatableClass extends Mock implements MyEquatableClass {}
1

There are 1 best solutions below

0
On

Well, it's said in mockito's documentation that it's prefered to create your mocks using code generation instead of the old extends Mock, by doing so I don't get any warning:

import 'package:equatable/equatable.dart';
import 'package:mockito/annotations.dart';

import 'mock_equatable_test.mocks.dart';

class MyEquatableClass extends Equatable {
  const MyEquatableClass();

  @override
  List<Object?> get props => [];
}

@GenerateMocks([MyEquatableClass])
void main() {
  final mockedClass = MockMyEquatableClass();
}

Another way of mocking your classes which is in my opinion just as good as using mockito is using the package mocktail:

import 'package:mocktail/mocktail.dart';

class MockMyEquatableClass extends Mock implements MyEquatableClass {}

While the mocking API may change a bit you'll have the same capabilities as mockito without relying on code generation.