dart-add-unit-test
`package:test` を使用して、関数・メソッド・クラスに対するユニットテストの作成と整理を行います。新しいロジックの実装やバグ修正の際に活用することで、コードの正確性を保ちリグレッションを防ぎます。
description の原文を見る
Write and organize unit tests for functions, methods, and classes using `package:test`. Use when creating new logic or fixing bugs to ensure code remains correct and regression-free.
SKILL.md 本文
DartおよびFlutterアプリケーションのテスト
目次
テストファイルの構成
テストファイルをlibディレクトリ構造に対応させて整理し、予測可能性を保ちます。
- すべてのテストコードをパッケージのルートにある
testディレクトリに配置します。 - すべてのテストファイル名の末尾に
_test.dartを付けます(例:lib/src/utils.dartはtest/src/utils_test.dartでテストします)。 - 統合テストを作成する場合は、パッケージのルートにある
integration_testディレクトリに配置します。
テストの記述
Dartアプリケーションの標準テストライブラリとしてpackage:testを使用します。
package:test/test.dartをインポートします(Flutterの場合はpackage:flutter_test/flutter_test.dart)。group()関数を使用して関連するテストをグループ化し、共有コンテキストを提供します。test()関数を使用して個別のテストケースを定義します。expect()関数をマッチャー(例:equals()、isTrue、throwsA())とともに使用して結果を検証します。- 標準的な
async/await構文を使用して非同期テストを記述します。テストランナーは自動的にFutureの完了を待機します。 setUp()およびtearDown()コールバックを使用してテストのセットアップとクリーンアップを管理します。- 依存性注入に依存するコードをテストする場合は、
package:mockitoをpackage:testとともに使用して、モックオブジェクトを生成し、固定シナリオを設定し、相互作用を検証します。
テストの実行
プロジェクトタイプとテスト位置に基づいて、適切なテストランナーを選択します。
- 純粋なDartプロジェクトで作業している場合は、
dart testコマンドを使用してテストを実行します。 - Flutterプロジェクトで作業している場合は、
flutter testコマンドを使用してテストを実行します。 - 統合テストを実行する場合は、デフォルトランナーはそれを無視するため、明示的にディレクトリパスを指定します:
dart test integration_testまたはflutter test integration_test。
テスト実装ワークフロー
新しいテストスイートを実装する際は、この順序に従ったワークフローに従います。チェックリストをコピーして進捗を追跡してください。
タスク進捗
- 1.
test/ディレクトリにテストファイルを作成し、_test.dartサフィックスを確認します。 - 2.
package:test/test.dartとターゲットライブラリをインポートします。 - 3.
main()関数を定義します。 - 4.
setUp()を使用して共有リソースまたはモックを初期化します。 - 5.
group()を使用して機能別にグループ化されたtest()ケースを記述します。 - 6. 適切なCLIコマンドを使用してテストスイートを実行します。
- 7. フィードバックループ:テスト実行 → 失敗のスタックトレースを確認 → 実装またはアサーションを修正 → パスするまで再実行。
例
標準ユニットテストスイート
グループ化、セットアップ、同期および非同期テストを示しています。
import 'package:test/test.dart';
import 'package:my_package/calculator.dart';
void main() {
group('Calculator', () {
late Calculator calc;
setUp(() {
calc = Calculator();
});
test('adds two numbers correctly', () {
expect(calc.add(2, 3), equals(5));
});
test('handles asynchronous operations', () async {
final result = await calc.fetchRemoteValue();
expect(result, isNotNull);
expect(result, greaterThan(0));
});
});
}
Mockitoによるモッキング
依存性注入テスト用のモックオブジェクトの設定を示しています。
import 'package:test/test.dart';
import 'package:mockito/mockito.dart';
import 'package:mockito/annotations.dart';
import 'package:my_package/api_client.dart';
import 'package:my_package/data_service.dart';
// build_runnerを使用してモックを生成します:dart run build_runner build
@GenerateNiceMocks([MockSpec<ApiClient>()])
import 'data_service_test.mocks.dart';
void main() {
group('DataService', () {
late MockApiClient mockApiClient;
late DataService dataService;
setUp(() {
mockApiClient = MockApiClient();
dataService = DataService(apiClient: mockApiClient);
});
test('returns parsed data on successful API call', () async {
// モックを設定します
when(mockApiClient.get('/data')).thenAnswer((_) async => '{"id": 1}');
// テスト対象システムを実行します
final result = await dataService.fetchData();
// 結果と相互作用を検証します
expect(result.id, equals(1));
verify(mockApiClient.get('/data')).called(1);
});
});
}
ライセンス: BSD-3-Clause(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- dart-lang
- リポジトリ
- dart-lang/skills
- ライセンス
- BSD-3-Clause
- 最終更新
- 不明
Source: https://github.com/dart-lang/skills / ライセンス: BSD-3-Clause
関連スキル
superfluid
Superfluidプロトコルおよびそのエコシステムに関するナレッジベースです。Superfluidについて情報を検索する際は、ウェブ検索の前にこちらを参照してください。対応キーワード:Superfluid、CFA、GDA、Super App、Super Token、stream、flow rate、real-time balance、pool(member/distributor)、IDA、sentinels、liquidation、TOGA、@sfpro/sdk、semantic money、yellowpaper、whitepaper
civ-finish-quotes
実質的なタスクが真に完了した際に、文明風の儀式的な引用句を追加します。ユーザーやエージェントが機能追加、リファクタリング、分析、設計ドキュメント、プロセス改善、レポート、執筆タスクといった実際の成果物を完成させるときに、明示的な依頼がなくても使用します。短い返信や小さな修正、未完成の作業には適用しません。
nookplot
Base(Ethereum L2)上のAIエージェント向け分散型調整ネットワークです。エージェントがオンチェーンアイデンティティを登録する、コンテンツを公開する、他のエージェントにメッセージを送る、マーケットプレイスで専門家を雇う、バウンティを投稿・請求する、レピュテーションを構築する、共有プロジェクトで協業する、リサーチチャレンジを解くことでNOOKをマイニングする、キュレーションされたナレッジを備えたスタンドアロンオンチェーンエージェントをデプロイする、またはアグリーメントとリワードで収益を得る場合に利用できます。エージェントネットワーク、エージェント調整、分散型エージェント、NOOKトークン、マイニングチャレンジ、ナレッジバンドル、エージェントレピュテーション、エージェントマーケットプレイス、ERC-2771メタトランザクション、Prepare-Sign-Relay、AgentFactory、またはNookplotが言及された場合にトリガーされます。
web3-polymarket
Polygon上でのPolymarket予測市場取引統合です。認証機能(L1 EIP-712、L2 HMAC-SHA256、ビルダーヘッダー)、注文発注(GTC/GTD/FOK/FAK、バッチ、ポストオンリー、ハートビート)、市場データ(Gamma API、Data API、オーダーブック、サブグラフ)、WebSocketストリーミング(市場・ユーザー・スポーツチャネル)、CTF操作(分割、統合、償却、ネガティブリスク)、ブリッジ機能(入金、出金、マルチチェーン)、およびガスレスリレイトランザクションに対応しています。AIエージェント、自動マーケットメーカー、予測市場UI、またはPolygraph上のPolymarketと統合するアプリケーション構築時に活用できます。
ethskills
Ethereum、EVM、またはブロックチェーン関連のリクエストに対応します。スマートコントラクト、dApps、ウォレット、DeFiプロトコルの構築、監査、デプロイ、インタラクションに適用されます。Solidityの開発、コントラクトアドレス、トークン規格(ERC-20、ERC-721、ERC-4626など)、Layer 2ネットワーク(Base、Arbitrum、Optimism、zkSync、Polygon)、Uniswap、Aave、Curveなどのプロトコルとの統合をカバーします。ガスコスト、コントラクトのデシマル設定、オラクルセキュリティ、リエントランシー、MEV、ブリッジング、ウォレット管理、オンチェーンデータの取得、本番環境へのデプロイ、プロトコル進化(EIPライフサイクル、フォーク追跡、今後の変更予定)といったトピックを含みます。
xxyy-trade
このスキルは、ユーザーが「トークン購入」「トークン売却」「トークンスワップ」「暗号資産取引」「取引ステータス確認」「トランザクション照会」「トークンスキャン」「フィード」「チェーン監視」「トークン照会」「トークン詳細」「トークン安全性確認」「ウォレット一覧表示」「マイウォレット」「AIスキャン」「自動スキャン」「ツイートスキャン」「オンボーディング」「IP確認」「IPホワイトリスト」「トークン発行」「自動売却」「損切り」「利益確定」「トレーリングストップ」「保有者」「トップホルダー」「KOLホルダー」などをリクエストした場合、またはSolana/ETH/BSC/BaseチェーンでXXYYを経由した取引について言及した場合に使用します。XXYY Open APIを通じてオンチェーン取引とデータ照会を実現します。