本日はAWESOME-COPILOTの技術調査枠です。
AWESOME-COPILOTのドキュメントを読みながら実際に操作を試して記事に残します。
今回はカスタムインストラクションの一つPowerShell Pester v5 Testing Guidelinesについてです。
PowerShell Pester v5 Testing Guidelines
PowerShell Pester v5 Testing GuidelinesはPowerShell用テストフレームワークPester v5で自動テストを正しく書くためのルールです。
Pester v5はPowerShell向けの公式テストフレームワークでPowerShellコードを自動テスト(Unit Test/Integration Test)できる仕組みです。
以下のページからGenaiscriptのインストールボタンをクリックして取得します。
github.com
インストールボタンを押してPowerShell Pester v5 Testing Guidelinesをダウンロードします。
すると.github/instructions配下にインストラクションがインストールされます。

インストールしたインストラクションはCopilotの動作に自動的に適用されます。
このインストラクションを読み込むと、CopilotはPester v5規約に沿ったテストコードを生成するようになります。
具体的にはCopilotは以下のような行動をとります。
ファイル名は*.Tests.ps1とする
CopilotはテストファイルをGet-UserInfo.Tests.ps1のように命名します。
これはPesterが認識しやすい標準形式です。
テスト対象の近くに配置する
Copilotはテストを対象スクリプトの隣またはTests/フォルダに置く設計にします。
直接コードを書かずPesterブロック内に入れる
全てのコードは以下のPesterブロック内に入れます。
BeforeAll {}
Describe {}
Context {}
It {}
BeforeAllでテスト対象を読み込む
Copilotはテスト冒頭で以下のようにdot-sourceで対象関数を読み込みます。
BeforeAll {
. $PSScriptRoot/Get-UserInfo.ps1
}
Describe / Context / It 階層を使う
Copilotは以下の階層でテストを整理します。
Describe 'FunctionName' {
Context 'When condition' {
It 'Should behavior' {
}
}
}これにより関数 → 条件 → 期待動作の構造になります。
Shouldでアサーションを書く
CopilotはPester標準の Shouldを使います。
例えば以下のようなコードです。
$result | Should -Be 'Expected'
$result | Should -Not -BeNullOrEmpty
{ Invoke-Thing } | Should -Throw
アサーションを適切に使い分ける
Copilotは目的に応じて以下を使います。
| 用途 | Should |
|---|---|
| 値比較 | -Be, -BeExactly |
| 配列 | -Contain, -HaveCount |
| 文字列 | -Match, -Like |
| 型 | -BeOfType |
| 真偽値 | -BeTrue, -BeFalse |
| 例外 | -Throw |
| ファイル | -Exist, -FileContentMatch |
Mockを使って依存を分離する
Copilotは外部依存をMock Get-ADUser { @{ Name = 'TestUser' } }で置き換えます。
これによりAD、ファイル、ネットワークなどを実際に叩かずテストできます。
Mock呼び出し回数を検証する
Copilotは以下のコードを使い、依存関数が期待通り呼ばれたか確認します。
Should -Invoke Get-ADUser -Exactly 1
セットアップと後片付けを分ける
Copilotは以下を用途別に使います。
| ブロック | 用途 |
|---|---|
| BeforeAll | 1回だけ高コスト準備 |
| BeforeEach | 各It前の準備 |
| AfterEach | 各It後の後片付け |
| AfterAll | 最後に1回だけクリーンアップ |