2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

GitHubでC#(.Net8)のWPFアプリを自動テストする

Last updated at Posted at 2024-05-15

概要

自作のC# WPFアプリケーションの作成に自動テストを導入した際の備忘録を残す

条件

  • .Net8.0アプリケーション
  • Visual Studio Community 2022

実施したこと

  • Visual Studioの拡張機能などのインストール
  • ソリューションを作成する
  • GitHub Actionを設定

Visual Studioの拡張機能などのインストール

  • .Netデスクトップ開発のオプション機能の中から"MSIX Packaging Tools"をインストール
  • ユニバーサルWindowsプラットフォーム開発をオプションなしでインストール
    (実際にはデフォルトでチェックが入っていた"IntelliCode"と"DirectX用グラフィックスデバッガーおよびGPUプロファイラー"だけインストール対象とした)

この2つがないとWindowsユニバーサルパッケージプロジェクトが作成できない

ソリューションを作成する

ソリューションの構成は、以下の2つに分離して作成

  • 対象の開発プロジェクトとテストプロジェクトを含んだもの
  • 対象の開発プロジェクトとWapプロジェクトを含んだもの

最初は全部一緒くたで構築したが、UnitTestsの自動ビルドの際に.sln単位でビルドがかかり、ApplicationWap.wapprojのエラーによりテストが通らない事態となったため、分離した。

GitHub Actionを設定

  1. GitHubの該当のProjectサイトでimage.pngを選択

  2. image.pngを選択しワークフローを追加

  3. .Net DesktopのConfigureを選択
    image.png

  4. ソリューション、テストプロジェクト、パッケージパス、パッケージプロジェクトを設定する
    image.png
    この時変数はそれぞれ以下を指定。
    Solution_Name: Application.sln(アプリとテストのソリューション)
    Test_Project_Path: ApplicationTest.csproj
    Wap_Project_Directory: ApplicationWap (ApplicationWapの保存フォルダ)
    Wap_Project_Path: .\ApplicationWap\ApplicationWap.wapproj

  5. matrix:の設定にtargetplatformを追加

    targetplatform: [x86, x64]
    
  6. Restoreの設定にRuntimeIdentifierを追加
    image.png

これはWPFだと必須らしい。

プロジェクトファイルを設定

  1. Application.csprojのプロジェクトプロパティを変更

    1. プロジェクトファイルをダブルクリックしてxmlファイルにてTargetFramewokの設定を
      • ターゲットフレームワーク
      • ターゲットOS
      • ターゲットOSバージョン"
        の組み合わせに修正
    2. PlatformTargetの設定を追記
    <TargetFramework>net8.0-windows7.0</TargetFramework>
    <PlatformTarget>x86</PlatformTarget>
    
  2. 証明書を作成
    今回はオレオレ証明書を作成(.pfx証明書ファイル)
    参考:https://qiita.com/ttoori-ttoori/items/f756a1baabda6359995d

  3. ApplicationWap.wapproj内に証明書を設定

    • 宣言を選択
    • 使用可能な宣言から"証明書"を選択
    • ストア名:”個人証明書”、コンテンツ:.pfxファイル名
      を設定
  4. Power ShellでSigningCertificate_Encoded.txtを作成(Actionのワークフローファイルにしたがって)
    ワークフローファイルのコメントの通り以下を実行すると.txtファイルができる

# $pfx_cert = Get-Content '.\SigningCertificate.pfx' -Encoding Byte
# [System.Convert]::ToBase64String($pfx_cert) | Out-File 'SigningCertificate_Encoded.txt'

できたSigningCertificate_Encoded.txtの内容をGitHubのsecretフォルダに保管
Setting→Secret and variables→ActionsのSecretsタブでNew repository secretを選択し、BASE64_ENCODED_PFXファイルに.txtファイルのデータをコピー
(私はパスワードを設定しなかったのでパスワードファイルはおかなかったが、パスワードがあればPfx_Keyとして同じSecretsに追加)

その他心得

  • テストは色んなパターンで通しておく
  • ビルドのwarningはなくす、減らす
  • エラーが出たらMESSAGEをちゃんと読んで書かれたことを対応する(意外とそれで治る)
  • リモートでfailになる場合は同じことをローカルで実行して確認する
2
2
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?