Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Use when creating mocks, stubbing methods, verifying interactions, registering fallback values, or choosing between mocks, fakes, and real objects (Mocktail).
.claude/skills/evanca-mocktail/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-08 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 9% | 0% |
| case-11 | ✗→✓ | ▲ Improved | -5% | 0% |
| case-13 | ✗→✓ | ▲ Improved | -20% | 0% |
| case-01 | ✓→✓ | = Same ✓ | -7% | 0% |
This skill defines how to correctly use the mocktail package for mocking in Dart and Flutter tests.
| Use | When | |---|---| | Real object | Prefer over mocks when practical. | | Fake (extends Fake) | Lightweight custom implementation; override only the methods you need. Prefer over mocks when you don't need interaction verification. | | Mock (extends Mock) | Only when you need to verify interactions (call counts, arguments) or stub dynamic responses. |
@override methods or implementations to a class extending Mock.verify assertions; otherwise prefer real or fake objects.dartclass MockMyService extends Mock implements MyService {} class FakeMyEvent extends Fake implements MyEvent {}
No code generation required — unlike Mockito, Mocktail uses noSuchMethod at runtime.
Register fallback values before using custom types with argument matchers. Do this in setUpAll or at the top of your test:
dartsetUpAll(() { registerFallbackValue(FakeMyEvent()); });
any(), captureAny(), or captureThat().dartfinal mock = MockMyService(); // Return a value when(() => mock.fetchData()).thenReturn('result'); // Throw an error when(() => mock.fetchData()).thenThrow(Exception('error')); // Dynamic/async response when(() => mock.fetchData()).thenAnswer((_) async => 'result'); // Future<void> when(() => mock.doWork()).thenAnswer((_) async {});
Future or Future<void>) with thenAnswer.Always include all named parameters in both when and verify calls. Use any(named: 'paramName') for those you don't care about:
dartwhen(() => mock.fetch( id: any(named: 'id'), headers: any(named: 'headers'), )).thenReturn(response);
dartverify(() => mock.fetchData()); // called at least once verifyNever(() => mock.fetchData()); // never called verify(() => mock.fetchData()).called(2); // called exactly twice
dart// Any positional argument when(() => mock.process(any())).thenReturn(true); // Capture arguments for later assertions final captured = verify(() => mock.process(captureAny())).captured; print(captured.last);
any() for positional parameters when you don't care about the exact value.captureThat() for conditional capturing..toString() returns for the type.Other measured skills in the registry, with their headline benchmark lift.