"No","テストID","対象ファイル","対象クラス/関数","対象メソッド","テスト観点","テストケース名","前提条件","入力値","期待結果","優先度","備考"
"1","UT-MCM-001","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","IsDestroyed","正常系","初期状態でIsDestroyedがfalseであること","インスタンスが生成されている","なし","falseが返却される","高","初期状態の検証"
"2","UT-MCM-002","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","IsDestroyed","正常系","破棄後にIsDestroyedがtrueになること","インスタンスが生成されている","Dispose()を呼び出し","trueが返却される","高","破棄後の状態確認"
"3","UT-MCM-003","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","Dispose","正常系","Dispose呼び出しでオブジェクトが破棄されること","インスタンスが生成されている、ネイティブ参照なし","なし","IsDestroyedがtrueになる","高","基本的な破棄処理"
"4","UT-MCM-004","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","Dispose","正常系","ネイティブ参照がある場合はDisposeで破棄されないこと","OnReferencedFromNative()が呼び出されている","なし","IsDestroyedがfalseのまま","高","参照カウント管理"
"5","UT-MCM-005","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","Dispose","異常系","複数回Disposeを呼び出しても例外が発生しないこと","インスタンスが生成されている","Dispose()を2回呼び出し","例外が発生しない","中","冪等性の確認"
"6","UT-MCM-006","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","OnReferencedFromNative","正常系","ネイティブ参照フラグが設定されること","インスタンスが生成されている","なし","内部の_referencedFromNativeがtrueになる","高","ネイティブ参照追加"
"7","UT-MCM-007","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","OnReferencedFromNative","正常系","複数回呼び出しても問題ないこと","インスタンスが生成されている","OnReferencedFromNative()を2回呼び出し","例外が発生しない","中","冪等性の確認"
"8","UT-MCM-008","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","OnUnreferencedFromNative","正常系","ネイティブ参照解除で破棄されること","OnReferencedFromNative()後にDispose()が呼ばれている","なし","IsDestroyedがtrueになる","高","ネイティブ参照解除"
"9","UT-MCM-009","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","OnUnreferencedFromNative","正常系","マネージド参照がある場合は破棄されないこと","OnReferencedFromNative()のみ呼ばれている","なし","IsDestroyedがfalseのまま","高","参照カウント管理"
"10","UT-MCM-010","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","OnUnreferencedFromNative","異常系","ネイティブ参照追加前に解除を呼んでも例外が発生しないこと","インスタンスが生成されている","OnUnreferencedFromNative()のみ呼び出し","例外が発生しない","中","エッジケース"
"11","UT-MCM-011","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","Shadow","正常系","Shadowプロパティに値を設定・取得できること","インスタンスが生成されている","MicroComShadowインスタンス","設定した値が取得できる","中","プロパティの基本動作"
"12","UT-MCM-012","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","Shadow","正常系","初期状態でShadowがnullであること","インスタンスが生成されている","なし","nullが返却される","中","初期状態の検証"
"13","UT-MCM-013","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","Shadow","正常系","破棄後にShadowがnullになること","Shadowが設定されている、破棄が発生","なし","nullが返却される","高","破棄時のクリーンアップ"
"14","UT-MCM-014","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","Destroyed","正常系","破棄時にDestroyedメソッドが呼び出されること","派生クラスでDestroyedをオーバーライド","Dispose()を呼び出し","Destroyedメソッドが呼ばれる","高","破棄コールバック"
"15","UT-MCM-015","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","Destroyed","正常系","破棄が発生しない場合はDestroyedが呼ばれないこと","派生クラスでDestroyedをオーバーライド、ネイティブ参照あり","Dispose()を呼び出し","Destroyedメソッドが呼ばれない","高","条件付きコールバック"
"16","UT-MCM-016","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","DestroyIfNeeded","正常系","マネージド・ネイティブ両方の参照がない場合に破棄されること","インスタンスが生成されている","Dispose()を呼び出し","_destroyedがtrueになる","高","破棄条件の検証"
"17","UT-MCM-017","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","DestroyIfNeeded","正常系","マネージド参照がある場合は破棄されないこと","インスタンスが生成されている","OnUnreferencedFromNative()のみ呼び出し","_destroyedがfalseのまま","高","参照保持時の動作"
"18","UT-MCM-018","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","DestroyIfNeeded","正常系","既に破棄済みの場合は何もしないこと","IsDestroyedがtrue","再度破棄を試行","状態が変わらない","中","二重破棄の防止"
"19","UT-MCM-019","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","スレッドセーフティ","状態","複数スレッドからDisposeを同時に呼んでも安全であること","インスタンスが生成されている","複数スレッドからDispose()を同時呼び出し","例外が発生しない、破棄が1回のみ行われる","高","並行性の検証"
"20","UT-MCM-020","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","スレッドセーフティ","状態","OnReferencedFromNativeとDisposeの同時呼び出しが安全であること","インスタンスが生成されている","OnReferencedFromNative()とDispose()を同時呼び出し","デッドロックや例外が発生しない","高","並行性の検証"
"21","UT-MCM-021","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","スレッドセーフティ","状態","OnUnreferencedFromNativeとDisposeの同時呼び出しが安全であること","OnReferencedFromNative()が呼び出されている","OnUnreferencedFromNative()とDispose()を同時呼び出し","デッドロックや例外が発生しない","高","並行性の検証"
"22","UT-MCM-022","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","ライフサイクル","正常系","参照追加→破棄→参照解除の順序で正しく動作すること","インスタンスが生成されている","OnReferencedFromNative()→Dispose()→OnUnreferencedFromNative()","最終的にIsDestroyedがtrueになる","高","ライフサイクルシナリオ"
"23","UT-MCM-023","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","ライフサイクル","正常系","参照解除→破棄の順序で正しく動作すること","OnReferencedFromNative()が呼び出されている","OnUnreferencedFromNative()→Dispose()","最終的にIsDestroyedがtrueになる","高","ライフサイクルシナリオ"
"24","UT-MCM-024","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","Shadow.Dispose","正常系","破棄時にShadowのDisposeが呼ばれること","Shadowが設定されている","Dispose()を呼び出し","ShadowのDisposeが呼ばれる","高","リソース解放"
"25","UT-MCM-025","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","Shadow.Dispose","異常系","Shadowがnullの場合でも破棄が正常に完了すること","Shadowが設定されていない","Dispose()を呼び出し","例外が発生しない","中","null安全性"
"26","UT-MCM-026","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","IUnknown","正常系","IUnknownインターフェースを実装していること","インスタンスが生成されている","インターフェースキャスト","IUnknownにキャストできる","中","インターフェース実装"
"27","UT-MCM-027","src/Avalonia.MicroCom/CallbackBase.cs","CallbackBase","IMicroComShadowContainer","正常系","IMicroComShadowContainerインターフェースを実装していること","インスタンスが生成されている","インターフェースキャスト","IMicroComShadowContainerにキャストできる","中","インターフェース実装"
