
Mocktail
- 37 installs
- 605 repo stars
- Updated August 4, 2026
- evanca/flutter-ai-rules
Helps with ai & agent building tasks.
About
mocktail is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- mocktail
- AI & Agent Building
- AI-coding skill
Mocktail by the numbers
- 37 all-time installs (skills.sh)
- Ranked #8,516 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/evanca/flutter-ai-rules --skill mocktailAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 37 |
|---|---|
| repo stars | ★ 605 |
| Last updated | August 4, 2026 |
| Repository | evanca/flutter-ai-rules ↗ |
What it does
Helps with ai & agent building tasks.
Files
Mocktail Skill
This skill defines how to correctly use the mocktail package for mocking in Dart and Flutter tests.
---
1. Mock vs. Fake vs. Real Object
| 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. |
- Never add
@overridemethods or implementations to a class extendingMock. - Only use mocks if your test has
verifyassertions; otherwise prefer real or fake objects.
---
2. Creating Mocks
class MockMyService extends Mock implements MyService {}
class FakeMyEvent extends Fake implements MyEvent {}No code generation required — unlike Mockito, Mocktail uses noSuchMethod at runtime.
---
3. Registering Fallback Values
Register fallback values before using custom types with argument matchers. Do this in setUpAll or at the top of your test:
setUpAll(() {
registerFallbackValue(FakeMyEvent());
});- Required for non-nullable custom types used with
any(),captureAny(), orcaptureThat(). - Register fallback values for any custom type used with argument matchers.
---
4. Stubbing
final 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 {});- Always stub async methods (returning
FutureorFuture<void>) withthenAnswer. - Stub every method you expect to be called, even if it's not the focus of your test.
---
5. Named Parameters
Always include all named parameters in both when and verify calls. Use any(named: 'paramName') for those you don't care about:
when(() => mock.fetch(
id: any(named: 'id'),
headers: any(named: 'headers'),
)).thenReturn(response);- If a method has default values for named parameters, Mocktail still expects them all to be matched.
---
6. Verification
verify(() => mock.fetchData()); // called at least once
verifyNever(() => mock.fetchData()); // never called
verify(() => mock.fetchData()).called(2); // called exactly twice---
7. Argument Matchers
// Any positional argument
when(() => mock.process(any())).thenReturn(true);
// Capture arguments for later assertions
final captured = verify(() => mock.process(captureAny())).captured;
print(captured.last);- Use
any()for positional parameters when you don't care about the exact value. - Use
captureThat()for conditional capturing. - When matching string output, be aware of what
.toString()returns for the type.
---