# バッチ設計書 12-vso_ut.cmd

## 概要

本ドキュメントは、VSO（Azure DevOps）環境用にvstest.console.exeでユニットテストを実行するバッチスクリプト `vso_ut.cmd` の設計書である。

### 本バッチの処理概要

vso_ut.cmdは、Visual Studio Test（vstest.console.exe）を使用してOpenConsoleプロジェクトのユニットテストDLLを実行するバッチスクリプトである。VSO（Visual Studio Online / Azure DevOps）環境と同等の方法でローカルでもテストを実行できるようにする。

**業務上の目的・背景**：CI/CD環境（Azure DevOps / VSO）ではvstest.console.exeを使用してテストが実行される。開発者がローカル環境でCI/CDと同じ方法でテストを実行したい場合に本バッチを使用する。これにより、CI/CD環境でのテスト失敗をローカルで再現・デバッグすることが可能となる。コードカバレッジの取得やTRXログの出力にも対応しており、CI/CD環境と同等のテスト結果を得ることができる。

**バッチの実行タイミング**：開発者による手動実行。CI/CD環境のテスト結果をローカルで再現したい場合や、コードカバレッジを確認したい場合に使用される。

**主要な処理内容**：
1. vstest.console.exeのパスを設定する（Visual Studio 2015のインストールパス）
2. 4つのテストDLLを指定してテストコマンドを構築する
3. アーキテクチャ別のrunsettingsファイルを指定する
4. コードカバレッジ（/EnableCodeCoverage）を有効にする
5. TRXロガー（/logger:trx）を有効にする
6. テストコマンドを新しいコマンドウィンドウで実行する

**前後の処理との関連**：razzle.cmdによるビルド環境セットアップ（%OPENCON%、%ARCH%、%_LAST_BUILD_CONF%の設定）が完了している必要がある。ビルドバッチ（bcz.cmd等）でビルドが完了していることが前提条件である。testcon.cmd（No.11）がTAEFを使用するのに対し、本バッチはvstest.console.exeを使用する点が異なる。

**影響範囲**：テスト実行のみで、ソースコードやビルド成果物への変更は行わない。コードカバレッジファイルとTRXログファイルが生成される。

## バッチ種別

テスト実行

## 実行スケジュール

| 項目 | 内容 |
|-----|------|
| 実行頻度 | 随時 |
| 実行時刻 | 任意 |
| 実行曜日 | 該当なし |
| 実行日 | 該当なし |
| トリガー | 手動 |

## 実行条件

### 前提条件

| 条件 | 説明 |
|-----|------|
| razzle.cmd 実行済み | 環境変数 %OPENCON%, %ARCH%, %_LAST_BUILD_CONF% が設定されていること |
| ビルド完了 | テスト対象DLLがビルド出力ディレクトリに存在すること |
| Visual Studio 2015 | vstest.console.exeがインストールされていること |
| runsettingsファイル | %OPENCON%\src\unit.tests.%ARCH%.runsettings が存在すること |

### 実行可否判定

環境変数 %OPENCON%, %ARCH%, %_LAST_BUILD_CONF% が設定されており、vstest.console.exeが存在し、対象のテストDLLとrunsettingsファイルが存在する場合に実行可能。スクリプト内での明示的なチェックは行われていない。

## 入力仕様

### 入力パラメータ

| パラメータ名 | 型 | 必須 | デフォルト値 | 説明 |
|-------------|-----|-----|-------------|------|
| %* | string | No | なし | vstest.console.exeに渡す追加引数（/Tests:テスト名 等） |

### 入力データソース

| データソース | 形式 | 説明 |
|-------------|------|------|
| ConAdapter.Unit.Tests.dll | DLL | アダプターユニットテスト |
| Conhost.Interactivity.Win32.Unit.Tests.dll | DLL | Win32インタラクティビティユニットテスト |
| Conhost.Unit.Tests.dll | DLL | コンソールホストユニットテスト |
| ConParser.Unit.Tests.dll | DLL | パーサーユニットテスト |
| unit.tests.%ARCH%.runsettings | XML | テスト実行設定ファイル |

## 出力仕様

### 出力データ

| 出力先 | 形式 | 説明 |
|-------|------|------|
| 標準出力 | テキスト | テスト実行コマンドラインの表示 |
| 新規ウィンドウ | テキスト | テスト実行結果 |
| TRXファイル | XML/TRX | テスト結果ログ |
| コードカバレッジファイル | バイナリ | コードカバレッジ結果 |

### 出力ファイル仕様

| 項目 | 内容 |
|-----|------|
| ファイル名 | vstest.console.exeのデフォルト命名規則に従う |
| 出力先 | vstest.console.exeのデフォルト出力先 |
| 文字コード | UTF-8 |
| 区切り文字 | 該当なし（XML/TRX形式） |

## 処理フロー

### 処理シーケンス

```
1. エコー出力を無効化（@echo off）
2. ローカル変数スコープ開始（setlocal）
3. VSTEST_PATHの設定
   └─ Visual Studio 2015のvstest.console.exeパスを設定
4. テストコマンドの構築
   └─ 4つのテストDLLパスを指定
   └─ runsettingsファイルを指定
   └─ コードカバレッジを有効化
   └─ TRXロガーを有効化
   └─ TestAdapterPathを設定
   └─ 追加引数（%*）を付加
5. テストコマンドの表示
   └─ 実行するコマンドラインを標準出力に表示
6. テスト実行
   └─ start cmd /k でテストコマンドを新しいウィンドウで実行
```

### フローチャート

```mermaid
flowchart TD
    A[バッチ開始] --> B["@echo off / setlocal"]
    B --> C["VSTEST_PATHの設定"]
    C --> D["テストコマンド構築（4DLL + オプション）"]
    D --> E["コマンドライン表示"]
    E --> F["start cmd /k でテスト実行（新規ウィンドウ）"]
    F --> G[バッチ終了]
```

## データベース操作仕様

### 操作別データベース影響一覧

データベース操作は行わない。

## エラー処理

### エラーケース一覧

| エラーコード | エラー種別 | 発生条件 | 対処方法 |
|------------|----------|---------|---------|
| なし | vstest.console.exe不在 | Visual Studio 2015が未インストール | Visual Studio 2015をインストールするか、パスを修正する |
| なし | 環境変数未設定 | %OPENCON%, %ARCH%, %_LAST_BUILD_CONF%が未設定 | razzle.cmdを事前に実行する |
| なし | DLL不在 | テストDLLがビルドされていない | ビルドを先に実行する |
| 非0 | テスト失敗 | テストケースが失敗した場合 | テスト結果を確認し該当コードを修正する |

### リトライ仕様

| 項目 | 内容 |
|-----|------|
| リトライ回数 | なし（手動再実行） |
| リトライ間隔 | 該当なし |
| リトライ対象エラー | 該当なし |

### 障害時対応

テスト失敗時は新規ウィンドウ上のテスト結果出力を確認し、失敗したテストケースを特定する。/Tests:パラメータでテスト名を指定することにより、個別テストの再実行が可能。

## トランザクション仕様

| 項目 | 内容 |
|-----|------|
| トランザクション範囲 | 該当なし |
| コミットタイミング | 該当なし |
| ロールバック条件 | 該当なし |

## パフォーマンス要件

| 項目 | 内容 |
|-----|------|
| 想定処理件数 | 4つのテストDLL内の全テストケース |
| 目標処理時間 | 明示的な制約なし（テストディスカバリに長時間かかる可能性あり） |
| メモリ使用量上限 | 明示的な制約なし |

## 排他制御

特別な排他制御は行わない。テストは新規ウィンドウで実行されるため、元のコマンドプロンプトは即座に解放される。

## ログ出力

| ログ種別 | 出力タイミング | 出力内容 |
|---------|--------------|---------|
| コマンド表示 | テスト実行前 | 実行するコマンドライン全体 |
| TRXログ | テスト実行後 | テスト結果（vstest.console.exeが自動生成） |
| コードカバレッジ | テスト実行後 | コードカバレッジ結果 |

## 監視・アラート

| 監視項目 | 閾値 | アラート先 |
|---------|-----|----------|
| 該当なし | 該当なし | 該当なし |

## 備考

- vstest.console.exeのパスはVisual Studio 2015（14.0）に固定されている。それ以降のバージョンを使用する場合はパスの修正が必要。
- テストフィルタは /name パラメータではなく /Tests: パラメータを使用する必要がある（ソースコード内のコメントに注記あり）。
- テストディスカバリには長時間かかる可能性がある旨がコメントに記載されている。
- テストは `start cmd /k` により新しいコマンドウィンドウで非同期的に実行される。
- ソースファイルパス: `tools/vso_ut.cmd`
