本文へ移動
cccskills
無料GitHub で公開

mocktail

Use when creating mocks, stubbing methods, verifying interactions, registering fallback values, or choosing between mocks, fakes, and real objects (Mocktail).

インストール方法を見る

含まれるファイル(1)

  • SKILL.md3.2 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

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

UseWhen
Real objectPrefer 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 @override methods or implementations to a class extending Mock.
  • Only use mocks if your test has verify assertions; 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(), or captureThat().
  • 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 Future or Future<void>) with thenAnswer.
  • 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.

References

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Use when working on accessibility, a11y, WCAG, ARIA, screen readers, keyboard nav, focus order, contrast, alt text, captions, reduced motion, or target sizes; not language/culture/device (see inclusive-design).

日本語の概要は準備中です。原文の説明を表示しています。

evanca/flutter-ai-rules6512026年10月10日 更新

Use when creating a feature, designing folder structure, adding repositories/services/view models, wiring dependency injection, or deciding which layer owns logic.

日本語の概要は準備中です。原文の説明を表示しています。

evanca/flutter-ai-rules6512026年10月10日 更新

bloc

無料

Use when creating a Cubit or Bloc, modeling state with sealed classes or status enums, wiring BlocBuilder/BlocListener/BlocProvider, writing bloc tests, or choosing between Cubit and Bloc.

日本語の概要は準備中です。原文の説明を表示しています。

evanca/flutter-ai-rules6512026年10月10日 更新

Use when asked to review a PR, MR, branch, or diff, audit changed files, or check code quality.

日本語の概要は準備中です。原文の説明を表示しています。

evanca/flutter-ai-rules6512026年10月10日 更新

Use when writing switch statements, refactoring if-else chains, creating data classes, choosing records vs classes, destructuring values, or modernizing pre-Dart-3 code.

日本語の概要は準備中です。原文の説明を表示しています。

evanca/flutter-ai-rules6512026年10月10日 更新

Use when building AI agents in Dart, implementing Genkit flows or tools, integrating LLMs into Dart or Flutter applications, or using Genkit Dart plugins.

日本語の概要は準備中です。原文の説明を表示しています。

evanca/flutter-ai-rules6512026年10月10日 更新

evanca のスキルをすべて見る

このスキルの問題を報告する