SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Visual Studio 単体テスト機能大全

Visual Studioで作る単体テスト、外部環境の利用方法

Visual Studio 単体テスト機能大全(5)

  • X ポスト
  • このエントリーをはてなブックマークに追加

 単体テストが作成できたら、念のためにテストを実行して成功することを確認しておきたいところですが、今回はこのまま実行するとエラーとなります。テストプロジェクトで接続文字列が定義されていないからです。

 そこで、テストプロジェクトにアプリケーション構成ファイルを追加し、接続文字列を定義します。ソリューションエクスプローラーでテストプロジェクト(付属サンプルではTestProject1)を選択し、コンテキストメニューから[追加]-[新しい項目]を選択します。表示されたダイアログでは、インストールされたテンプレートから[Visual C# アイテム]を選択し、中央のリストから[アプリケーション構成ファイル]を選択し、[追加]ボタンをクリックします。

 アプリケーション構成ファイルの編集画面がVisual Studioの中央に表示されるので、接続文字列をリスト3のように定義してください。

[リスト3]接続文字列の定義(TestProject1のApp.config)
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <connectionStrings>
    <add name="Express"
         connectionString="Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\pubs.mdf;Integrated Security=True;User Instance=True"
         providerName="System.Data.SqlClient" />
  </connectionStrings>
</configuration>

 接続先となるデータベースを用意します。ソリューションエクスプローラーでテストプロジェクトを選択し、コンテキストメニューから[追加]-[新しいフォルダー]を選択します。テストプロジェクト上にフォルダが1つ作成されるので、名前を「DB」としておきます。フォルダが作成できたら、テストを始める前に準備しておいたサンプルデータベースのフォルダから「PUBS.MDF」および「PUBS_LOG.LDF」ファイルをコピーし、今作成した「DB」フォルダに貼り付けます。この一連の作業後、テストプロジェクトは図1のようになっています。

図1:pubsデータベースの追加後の状態
図1:pubsデータベースの追加後の状態

 最後に、テストの設定ファイルを編集します。ソリューションエクスプローラーで「Solution Items」フォルダにある「Local.testsettings」ファイルをダブルクリックして開きます。左側の項目から[配置]を選択し、右側にある[配置を有効にする]にチェックを入れてください。次に[ディレクトリの追加]で[TestProject1\DB]を選択します。パスを正しく選択できれば、図2のように項目が追加されています。

図2:配置ディレクトリの追加後の状態
図2:配置ディレクトリの追加後の状態

 図2の状態から右下の[適用]ボタンをクリックし、[閉じる]ボタンで設定完了です。リスト2で作成したInsertAuthorsTestを実行して、テストが成功することを確認してください。

補足や注意事項

 SQL Server Express Editionを利用して、データベース操作を伴うテストを実行するところまでを見てきましたが、何点か補足と注意事項を確認しておきましょう。

 リスト2のテストを何回か実行してみてください。何度実行してもテスト結果は成功となります。テスト対象メソッドがデータの追加を行っているauthorsテーブルは、pub_id列が主キーに設定されており、InsertAurhorsメソッドが固定されたpub_idの値を何回も挿入しているのに、何度テストを行っても成功するという事態になっています。これは決しておかしいわけではありません。SQL Server Express Editionに用意されたファイルアタッチデータベースとユーザーインスタンスという機能を利用してテストを行っているため、このような動作が可能となっています。

 リスト3で定義した接続文字列をよく見てみると確認できます。通常、SQL Serverへの接続では、接続先サーバ名の設定(Data Source)、接続先データベース名の設定(Initial Catalog)、ユーザー資格情報の設定(Integrated Security)を行って接続しますが、リスト3ではInitial Catalogの定義がありません。代わりにAttachDbFilenameというものが使われています。これがファイルアタッチデータベース機能を利用する際の設定で、アタッチしたいデータベースファイル(mdfファイル)へのパスを記述します。パス文字列の中身を見ると「|DataDirectory|」という特殊な形式がありますが、これはVisual Studioに用意されたパス解決機能で、アプリケーションやテストの実行時に実行ディレクトリに置き換わるようになっています。今回の場合はテストを行うディレクトリに置き換わるようになります。また、接続文字列の末尾にUser InstanceをTrueで定義し、ユーザーインスタンス機能を利用するように設定しています。

 さらに、配置の設定を行ったことで、テストプロジェクト内に格納した「PUBS.MDF」および「PUBS_LOG.LDF」ファイルがテストのたびにテストを行うディレクトリにコピーされます。これら一連の設定の組み合わせにより、テストのたびに新しいpubsデータベースを利用してテストを行うことができるため、リスト2のテストを何回実行しても問題なくテストが実行できるようになっています。

 今回のテストの肝となるファイルアタッチデータベース機能自体は、SQL Server Express Edition以外にも用意されていますが、ユーザーインスタンスはExpress Editionのみの機能です。テストを繰り返し実行するには両方の機能が必要なため、残念ながらSQL Server Express Edition以外を利用して同様の設定を行ってもうまく動作させることができません。

 Oracle Databaseなどを含め他のデータベースを利用して同様のテストを実行したい場合には、『Visual Studio単体テストの前準備と後始末』(CodeZine)で紹介したテスト前バッチ、テスト後バッチを利用する方法を使い、データベースの初期化、後片付けを行うスクリプトを動作させてください。

次のページ
ASP.NET環境における単体テスト

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Visual Studio 単体テスト機能大全連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト りばてぃ(リバティ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6209 2011/10/18 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング