アドベントカレンダーからいらした方、初めまして。普段はC#等のMicrosoft系の技術を中心に書いています。今回の内容も他のアドベントカレンダーに書いた方が良い内容なのかもしれませんが、参加するかどうか&テーマに悩んでいる間に埋まってしまいました(苦笑)。いざテーマを決めた後、このアドベントカレンダーが丁度空いていたので、思い切って参加してみました。APIで、DBに接続してデータを取得するプログラムのテストってどうやっていますか?自分はテンプレートからプロジェクトを新規作成するときに、テストプロジェクトも一緒に作成するようにしてます。するとテストプロジェクトが別に用意されて設定ファイルも別になります。この状態でテストクラスからどうやって上記プログラムのテストをするかという話です。検討いろんな方法が考えられます。モックオブジェクトを使用するテストプロジェクトにもDBを用意するローカルのDBを使用しないテストプロジェクトを作成しない。モックオブジェクトを使用する良いアイデアだと思います。大部分はこれでまかなえると思います。ライブラリとしては、自分はMoqをよく使います。これだとDBに接続できるかというテストは出来ませんし、モックオブジェクトの設定が大量・複雑になりやすいです。テストプロジェクトにもDBを用意する開発中はLocalDBをよく使用するので準備はこれが簡単かもしれません。DBが2か所にあるということで、マスタ系の初期データの投入プログラムが2か所に重複しますし、マイグレーションの時に困ります。ローカルのDBを使用しないLocalDBを使用せずDBサーバーを建てるのも一つの手です。DBが共有の場合は他への影響が気になってデータの追加・削除がやりづらいですし、ローカルのDBサーバーをインストールする権限がないかもしれません。テストプロジェクトを作成しない。メインプロジェクトにテストクラスを作成する方法です。Microsoftの流儀に沿っていない気がするので、若干の不安と気持ち悪さがあります。あと、ビルドやデプロイ時にテストクラスやテスト用ライブラリを除外する方法を知らないと、テストコードも含んだ実行ファイルが作成されてしまいます。結局やりたい事はテストプロジェクトからメインプロジェクトのDBにアクセスしたいだけなんだから、もっと良い方法があるはずだと思って、ネットサーフィンをし続けた結果、DataDirectoryの値を変更するという方法にたどり着きました。Frameworkをインストールします。次にメインプロジェクトのWeb.configのconnectionStringsの値を、テストプロジェクトのApp.configにコピーします。いう名前でテストプロジェクトに作成します。クラスの作成場所はどこでも良いみたいなので、DALフォルダを作成してその下に置きました。}}上記ではテストプロジェクトの命名ルールを活かして、メインプロジェクトのApp_Dataフォルダ(メインプロジェクトのDataDirectoryの場所)を指定するように設定しています。これでTestContextをnewした時に、メインプロジェクトのDBに接続することが出来ます。IDatabaseInitializerを継承したクラスによる初期データ投入も行われます。あとはテストメソッドの中で、以下のようにTransactionScopeを使用すれば、テストごとに自由にDBを触ることが出来て、後始末もしてくれます。ちなみに参考にしたのは昨年書かれたブログ(参考サイト)ですが、そこから参照されているのはさらに7年前のブログでした。自分が知ったのは最近で、結構ためになったので書くことにしました。明けましておめでとうございます。(1)注目記事はてなブログをはじめよう!redwarriorさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。