dart-test-fundamentals
`package:test` の基本概念とベストプラクティスを提供するスキルです。`test`・`group` による記述方法、`setUp`・`tearDown` などのライフサイクルメソッド、および `dart_test.yaml` を使った設定方法をカバーします。
description の原文を見る
|- Core concepts and best practices for `package:test`. Covers `test`, `group`, lifecycle methods (`setUp`, `tearDown`), and configuration (`dart_test.yaml`).
SKILL.md 本文
Dart テスト基礎
このスキルを使用する場面
以下の場合にこのスキルを使用します:
- 新しいテストファイルを作成する
groupでテストスイートを構造化するdart_test.yamlを通じてテスト実行を設定する- テストのライフサイクルメソッドを理解する
発見
テスト構造の改善候補を見つけるには:
try-finallyクリーンアップ
addTearDownの代わりにtry-finallyを使用してクリーンアップしているテストを検索:
- Regex:
\bfinally\s*\{(テスト内のリソースクリーンアップに使用されているかを確認)
コア概念
1. テスト構造 (testとgroup)
-
test: テストの基本単位です。test('description', () { // assertions }); -
group: テストを論理的なブロックに整理するために使用します。- グループはネストできます。
- 説明は連結されます (例: "Group Description Test Description")。
setUpとtearDown呼び出しのスコープを設定するのに役立ちます。- 命名: クラス名に対応するグループには
PascalCaseを使用します (例:group('MyClient', ...))。 - 単一グループを避ける: ファイル内のすべてのテストを単一の
group呼び出しでラップしないでください (唯一のグループの場合)。- 注意: 明示的に要求されない限り、あなたが作成していない既存コードのクリーンアップ時にグループを削除しないでください。これはDIFFに大きな変動をもたらし、ほとんどのエンジニアが望まないものです。
-
テストの命名
test('test name here',:- 冗長な「test」プレフィックスを避けます。代わりに
groupを使用します。 - 説明に期待される動作または結果を含めます (例:
'throws StateError'または'adds API key to URL')。 - 説明は、グループ名と連結したときに読みやすいようにしてください。
- 冗長な「test」プレフィックスを避けます。代わりに
-
名前付きパラメータの配置:
testとgroup呼び出しの場合、名前付きパラメータ (例:testOn,timeout,skip) を説明文の直後、コールバッククロージャの前に配置します。これにより、テストロジックを最後に保つことで読みやすさが向上します。test('description', testOn: 'vm', () { // assertions });
2. ライフサイクルメソッド (setUp, tearDown)
setUp: 現在のgroup内のすべてのtestの前に実行されます (ネストされたグループを含む)。tearDown: 現在のgroup内のすべてのtestの後に実行されます。setUpAll: グループ内の最初のテストの前に一度だけ実行されます。tearDownAll: グループ内のすべてのテストの後に一度だけ実行されます。
ベストプラクティス:
- テスト分離を保証するため、状態のリセットに
setUpを使用します。 - リセットなしでテスト間でミュータブルな状態を共有しないようにします。
3. リソースのクリーンアップ
test本体内で作成されたリソースをクリーンアップするには、try-finallyブロックの代わりにaddTearDownの使用を検討してください。
避ける:
test('can create and delete a file', () {
final file = File('temp.txt');
try {
file.writeAsStringSync('hello');
expect(file.readAsStringSync(), 'hello');
} finally {
if (file.existsSync()) file.deleteSync();
}
});
推奨:
test('can create and delete a file', () {
final file = File('temp.txt');
// リソース作成の直後にティアダウンを登録
addTearDown(() {
if (file.existsSync()) file.deleteSync();
});
file.writeAsStringSync('hello');
expect(file.readAsStringSync(), 'hello');
});
4. 設定 (dart_test.yaml)
dart_test.yamlファイルはテストランナーを設定します。一般的な設定は以下の通りです:
プラットフォーム
テストが実行される場所を定義します (vm, chrome, node)。
platforms:
- vm
- chrome
タグ
テストを分類して、特定のサブセットを実行します。
tags:
integration:
timeout: 2x
コード内での使用:
@Tags(['integration'])
import 'package:test/test.dart';
タグの実行:
dart test --tags integration
タイムアウト
テストのデフォルトタイムアウトを設定します。
timeouts:
2x # デフォルトタイムアウトの2倍
5. ファイル命名
- テストファイルは
_test.dartで終わる必要があり、テストランナーに認識されます。 test/ディレクトリにテストを配置します。
一般的なコマンド
dart test: すべてのテストを実行します。dart test test/path/to/file_test.dart: 特定のファイルを実行します。dart test --name "substring": 説明に一致するテストを実行します。
関連スキル
dart-test-fundamentalsはテストの構造化と設定のためのコアスキルです。これらのテスト内でアサーションを書くには、以下を参照してください:
- dart-matcher-best-practices:
プロジェクトが従来の
package:matcher(expect呼び出し)を使用している場合に使用します。 - dart-checks-migration: プロジェクトが最新の
package:checks(check呼び出し)に移行している場合に使用します。
ライセンス: Apache-2.0(寛容ライセンスのため全文を引用しています) · 原本リポジトリ
詳細情報
- 作者
- kevmoo
- リポジトリ
- kevmoo/dash_skills
- ライセンス
- Apache-2.0
- 最終更新
- 不明
Source: https://github.com/kevmoo/dash_skills / ライセンス: Apache-2.0
関連スキル
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を通じてオンチェーン取引とデータ照会を実現します。