SHOEISHA iD

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

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

Visual Studio 単体テスト機能大全

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

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

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

データベース操作を伴うテスト

 一口にデータベースと言っても、SQL ServerやOracle Databaseをはじめとしたさまざまなものがありますが、今回はその中でも簡単に入手可能で、かつ単体テストが行いやすいという点から、SQL Server Express Editionを対象としたデータベースの操作を伴う単体テストを行っていきます。なお、SQL Serverのバージョンは2005や2008 R2などどのバージョンでも構いませんが、必ずExpress Editionを利用するようにしてください。

データベースの準備

 本稿では、Visual Studio 2010のインストール時に付属しているSQL Server 2008 Express Edition Service Pack 1を対象データベースとして利用します。インストールされていない場合は、Visual Studio 2010のインストーラを起動してSQL Server 2008 Express Edition Service Pack 1を追加インストールしてください。

 続いて、テスト用に利用するデータベースとして、SQL Server 2000の頃にサンプルとして用意されていたpubsデータベースを利用します。このデータベースは、マイクロソフトのWebサイトNorthwind and pubs Sample Databases for SQL Server 2000からインストーラー「SQL2000SampleDb.msi」をダウンロードできます。「SQL2000SampleDb.msi」を実行すると、既定では「C:\SQL Server 2000 Sample Databases」フォルダにpubsデータベースのmdfとldfのセットやデータベース定義用のスクリプトファイルなどが展開されるので、これらを利用します。

操作手順

 作業を開始する前に、今回テスト対象としているメソッドを確認しておきます。これはリスト1のようになっています。

[リスト1]テスト対象となるメソッド(Class1.cs)
/// <summary>
/// pubsデータベースのauthorsテーブルに新しいデータを1行追加します。
/// </summary>
/// <returns></returns>
public int InsertAuthers()
{
  //アプリケーション構成ファイルのデータベース接続文字列定義から
  //定義名が"Express"になっている接続文字列を取得する
  string connectionString = ConfigurationManager.ConnectionStrings["Express"].ConnectionString;

  //SQL Serverへの新しい接続を作成する
  SqlConnection connection = new SqlConnection(connectionString);

  //実行するSQL文を定義する
  string cmdText = "INSERT INTO authors (au_id, au_lname, au_fname, phone, address, city, state, zip, contract) "
                 + "VALUES ('999-99-9999'," //au_id
                 + "'libaty',"              //au_lname
                 + "'CodeZine',"            //au_fname
                 + "'804 826-0752',"        //phone
                 + "'3410 Blonde St.',"     //address
                 + "'Rockville',"           //city
                 + "'IN',"                  //state
                 + "'48105',"               //zip
                 + "1)";                    //contract
  SqlCommand command = new SqlCommand(cmdText, connection);

  int result;
  try
  {
    //データベースとの接続を開く
    connection.Open();
    //SQL文を実行する
    result = command.ExecuteNonQuery();
  }
  finally
  {
    //データベースとの接続を閉じる
    connection.Close();
  }

  return result;
}

 このコードでは、アプリケーション構成ファイル(app.config)のconnectionStrings要素に定義されたExpressという名前の接続文字列を利用して、pubsデータベースに接続し、authorsテーブルに新しいデータを1行追加しています。追加するデータは通常はメソッドの引数として受け取ることがほとんどですが、今回はわかりやすくするためにメソッドの中に直接記述しています。

 次に、今までと同様にリスト1のメソッドをテストする単体テストを作成します。とりあえずの作成となるため、単純に成功するパターンの単体テストを作成しておきます。これは例としてリスト2のようになります。

[リスト2]InsertAuthorsメソッドの単体テスト(Class1Test.cs)
/// <summary>
///InsertAuthers のテスト
///</summary>
[TestMethod()]
public void InsertAuthersTest()
{
  Class1 target = new Class1();
  int expected = 1;
  int actual;
  actual = target.InsertAuthers();
  Assert.AreEqual(expected, actual);
}

次のページ
補足や注意事項

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング