「Unit testing」カテゴリーアーカイブ

クラス外部の非同期メソッドを呼び出す非同期メソッドを対象にした単体テスト

非同期メソッドの単体テストを書いていて、ちょっと考え込んだので、備忘録を兼ねて書いておきます。ネタ的には「リポジトリを利用するクラスに対する Moq を利用したメソッドの引数のテスト」に引き続いての moq を使った単体テストネタということで 😉

考え込んだのは、クラス外部の非同期メソッドを呼び出す非同期メソッドを対象にした単体テストをどう書くかということです。
具体的には「サービス層の public Async Task GetSampleAsync(int id) のテスト」で、この GetSampleAsync がデータアクセス層の public Async Task GetSampleAsync(int id) を内部で呼び出しているというようなものです。 続きを読む クラス外部の非同期メソッドを呼び出す非同期メソッドを対象にした単体テスト

リポジトリを利用するクラスに対する Moq を利用したメソッドの引数のテスト

リポジトリを利用するクラスで、データ更新行うメソッド void Update(int Id, int quantity) (キーが Id のレコードの hoge 数値フィールドに quantity の値を加算する)について、hoge 数値フィールドに quantity の値が加算された数値で更新が行われることをテストする場合、リポジトリの更新メソッド呼び出しの引数をチェックすることが考えられます。ただし、本物のリポジトリを呼び出すと DB が更新されてしまうので、モック・ライブラリを利用しますよね。モック・ライブラリの一つである Moq を利用した場合、モックインスタンス.VerifyAll() メソッドでメソッドの呼び出しと引数の確認が行えますが、引数がクラスの場合、参照するインスタンスについての比較になってしまうので、何もしなければ引数のインスタンスと比較用のインスタンスは別物ということで、検証失敗になります。
これを回避するため、比較用のインスタンスを Equals メソッドをオーバーライドしたクラスから生成させ、比較するプロパティをリフレクションを用いることで、明示的に指定しないようにしてみました(モデルを変更した時のテストコードの比較部分の更新し忘れ対策 😛 )。
続きを読む リポジトリを利用するクラスに対する Moq を利用したメソッドの引数のテスト

NUnit のテストを STA で行う方法

NUnit の Version 2.6.2 を入れてみたら、「System.InvalidOperationException: 呼び出しスレッドは、多数の UI コンポーネントが必要としているため、STA である必要があります。」ということで、エラーになるものがありました。以前のバージョンでは App.config に STA 動作を設定すれば OK だったんですけどね。ということで、2.6.2 での STA 設定の方法をメモしておきます。 続きを読む NUnit のテストを STA で行う方法

Entity framework コードファーストでリレーションシップを張った時のテスト用偽装リポジトリ

Entity framework コードファーストでリレーションシップを設定した時に、ナビゲーション・プロパティを操作するコードのテスト用偽装リポジトリを書いてみました。

例は著者情報と本情報のエンティティで。 続きを読む Entity framework コードファーストでリレーションシップを張った時のテスト用偽装リポジトリ