---
description: `#[mcp_server]` 属性のテスト方法
globs: *.rs
alwaysApply: false
---

# 概要

- セクション `ファイルパス` で説明されたファイルにテストを記載します
- そのファイルはセクション `ファイル構造` で説明された構造にする必要があります
- コンパイルエラーやテストの失敗の原因を調査する際は、セクション `デバッグ方法` で説明された手順で行います

# ファイルパス

`./tests/mcp_server_<name>.rs`

`#[mcp_server]` を付与する型一つにつき一つのファイルを作成します。
`#[mcp_server]` を付与する型を新しく作成する場合は新しいファイルを作成します。

# ファイル構造

```rust
use <標準ライブラリのパス>;

use <外部クレートのパス>;

use <mcp_attr クレートのパス>
use mcp_attr::Result;


struct MyMcpServer {
  ...
}

#[mcp_server]
impl McpServer for MyMcpServer {
  ...
}

// 同期のテスト
#[test]
fn test_name() -> Result<()> {

}

// 非同期のテスト
#[tokio::test]
async fn test_name() -> Result<()> {
  ...
}

// テストを補助する関数など
fn helper_func() {
  ...
}

```

# デバッグ方法

下記の手順で問題を調査してください。

1. テストを実行し問題が発生している箇所を確認します。
2. `#[mcp_server]` を `#[mcp_server(dump)]` に変更します。
3. 問題が発生していたテストを再実行します
4. コンパイルエラーが発生し、 `#[mcp_server]`によってマクロ展開後のコードがエラーメッセージとして出力されます。マクロ展開後のコードは`// ===== start generated code =====` と `// ===== end generated code =====` で囲まれた部分にあります。
5. `#[mcp_server]` が設定された部分全体をコメントアウト、代わりに先ほどのエラーメッセージの`// ===== start generated code =====` と `// ===== end generated code =====` で囲まれた部分のコードを追加します。
6. テストを再実行します。
7. マクロ展開後コードでどのようなエラーが発生しているかを確認し、修正します。
8. エラーがなくなるまで手順6と7を繰り返します。
9. エラーが無くなったら、マクロ展開用のプログラム `./macros/src/lib.rs` を修正して、生成されるコードに同様の変更が適用されるようにします。
10. `// ===== start generated code =====` と `// ===== end generated code =====` で囲まれた部分を削除します。
11. `#[mcp_server]` が設定された部分全体のコメントアウトを解除します。
12. テストを再実行し、問題がないかを確認します。問題があれば手順2に戻ります。
