スポンサーリンク
スポンサーリンク

C#によるスタブ(Stub)の作り方 v2

.NET CoreC#Visual StudioWindowsフォームアプリスタブ開発方式

スタブ(Stub)の作り方で実装したアプリは、スタブの Return値が固定されていて、Return値を変えて試験する際、毎回ソースコードを修正してビルドし直す必要がありました。
今回は、本体アプリ実行中にも、スタブの Return値を動的に変更できる別アプリ(スタブコントローラー)を追加実装し、より柔軟な試験が出来るようにしました。

Visual Studio 2022 + .NET 6.0 から、.Net Framworkなみに Windowsフォームアプリの開発が出来るようになりました。
Visual Studio 2022 がなかなか安定せず、最近ようやく、Visual Studio 2022 + .NET 6.0 で Windowsフォームアプリを実装していて、変な動きに悩まされなくなってきました。
Visual Studio 2019 + .NET 5.0 の Windowsフォームアプリの開発では、DataGridViewのBindingが未完成で使い物になっていませんでしたが、Visual Studio 2022 + .NET 6.0 だと、Visual Studio 2019 + .Net Framwork 4.8.1 環境くらい、Windowsフォームアプリをサクサク実装できます。

ソースコードはGitHubで公開しています。

 

他社製品 I/Fライブラリ(DLL)

ThirdPartyProducts/ThirdPartyProducts/ThirdPartyProducts.csproj

前回からの差は、.NETのバージョンを .NET 5.0 から 6.0 へ上げただけです。

 

自社製品(本体)

InHouseProduct/InHouseProduct/InHouseProduct.csproj

前回からの差は、.NETのバージョンを .NET 5.0 から 6.0 へ上げただけです。

 

自社製品(Stub)

前回からの差は、.NETのバージョンを .NET 5.0 から 6.0 へ上げ、
Windowsフォームアプリの スタブコントローラープロジェクトを作成し、InHouseProduct_onStub.sln へ追加。
InHouseProduct_onStub.sln は、自社製品(Stub)の本体アプリ(InHouseProduct)とスタブコントローラー(StubController)とを、同時に起動してスタブの値が動的に反映されるようにしています。

 

InHouseProduct_onStub/InHouseProduct/InHouseProduct.csproj

.NETのバージョンを .NET 5.0 から 6.0 へ変更。

 

InHouseProduct_onStub/ThirdPartyProducts_Strub/ThirdPartyProducts.csproj

.NETのバージョンを .NET 5.0 から 6.0 へ変更。

 

InHouseProduct_onStub/InHouseProduct_onStub.sln

スタブコントローラー(StubController)を追加し、
デバッグ実行時、本体アプリプロジェクト(InHouseProduct)のWindowsフォーム画面と、スタブコントローラープロジェクト(StubController)のWindowsフォーム画面とが、同時に起動するように設定。

 

InHouseProduct_onStub/StubController/StubController.csproj

Windowsフォームアプリとして新規作成した、スタブコントローラーのプロジェクト。

 

InHouseProduct_onStub/StubController/Form1.cs

スタブコントローラーの画面。
スタブの各プロパティ(MethodName列)が何を返すかを、ReturnCode列のコンボボックスで設定し、反映ボタンをクリックすることで、自社製品(本体)アプリに新しいスタブの値を渡します。

※DataGridViewのコンボボックス型(DataGridViewComboBoxColumn)に、enumの値をリストアップする実装は、この書き方が一番シンプルだと思う。
returnCodeDataGridViewTextBoxColumn変数は、Form1.Designer.cs に定義されていて、
Form1.cs は、Designer.cs に定義されている変数から操作できます。

 

InHouseProduct_onStub/ThirdPartyProducts_Strub/StubSetting.cs

スタブコントローラー画面のDataGridViewにバインドするデータクラス。

 

InHouseProduct_onStub/ThirdPartyProducts_Strub/ThirdPartyProductOps.cs

スタブコントローラー画面の「反映」ボタンは、DataGridViewのデータを、jsonファイルとして保存し、スタブ本体画面のスタブは、その jsonファイルを読込むことで、スタブの値変更が動的に反映されるようにしています。
前回は固定で返していたスタブの値を、今回はjsonファイルから読込んだ値を返すように変更しています。

 

InHouseProduct_onStub/ThirdPartyProducts_Strub/StubSettingFile.cs

jsonファイルを高速に処理する為のクラス。

※Jsonの Serialize/Deserializeは、JsonSerializerOptionsを指定して、複雑で巨大なJsonデータも扱えるようにし、ファイル書込み読込み最速の File.WriteAllText()/File.ReadAllText()を使ったこちらの実装方式、お勧めです。

コメント

タイトルとURLをコピーしました