Index: [Article Count Order] [Thread]

Date:  Wed, 26 Feb 2003 17:05:59 +0900
From:  "小井土亨" <koido@....jp>
Subject:  [XP-jp:04115] Re: NUnit ガイド Ver2
To:  <extremeprogramming-jp@....jp>
Message-Id:  <000401c2dd6d$e592c490$26230e0a@koido044664>
References:  <20030226085018.1E5C.TOGAWA@....com> <001e01c2dd2e$bac015e0$26230e0a@koido044664> <20030226160358.1E62.TOGAWA@....com>
X-Mail-Count: 04115

小井土です。


> 十河です。
> お返事ありがとうございます。

中略

> データベースに直接関係してくるテストも、開発中に移行元データが入ってきた
> り、まったく違うテスト用のデータが入ってきたりと、完全でないテストがだん
> だん増えてきてしまったりします。
> (DB内のデータに依存したテストコードを書いているのでこれが間違いなのかも)
>
> ふと、トランザクションをSetUpで開始して、TereDownでロールバックすること
> で、テストデータを残さずに、データベースのテストが行えるかなと思いました。
>
> データベースに対してのテストはどのように行われていますでしょうか?
これとほぼ同じことを小さいFW化して、テストするというのをPASSJのXPの
セミナーでデモしました。
#実際には、まだ利用していません。
これもテストカタログに入れる予定です。

SQL-Serverは、トランザクションがネスティングできるので、比較的きれいに実現
できました。
ポイントは、コネクションの共有化とトランザクションの入れ子構造です。
問題は、テストコードは含まれないが、テストのためのコードが含まれていること
ですね。

以下はそのときのテストケースです。

DatabaseAccessTestCaseというクラスで、テーブルの件数取得やテーブルデータの
読み込み関数を提供しています。

using System;
using System.Data.SqlClient;

using OSK.DatabaseAccess.Core;

using NUnit.Framework;

namespace OSK.DatabaseAccess.Tests
{
 /// <summary>
 /// SimleDatabaseAccessTestCase の概要の説明です。
 /// </summary>
 [TestFixture]
 public class SimpleDatabaseAccessTestCase : DatabaseAccessTestCase
 {
  private SimpleDatabaseAccess target;
  private const string connectionString = "server=(local); uid=sa; pwd='OSKPassword';
database=testDB";

  [SetUp]
  public void SetUp()
  {
   target = new SimpleDatabaseAccess( connectionString );
   SetUpContextHandler( target, connectionString );
  }
  [TearDown]
  public void TearDown()
  {
   TearDownContextHandler();
  }

  [Test]
   public void AddTest()
   {
     string[] newData;
     int recordCount;
     recordCount = GetRecordCount("TestData");
     target.Add("XYZ", "東京都");
     Assertion.AssertEquals("データが追加されなかった", recordCount + 1,
GetRecordCount("TestData"));
     Console.WriteLine("RecordCount=" + recordCount.ToString());

      newData = ReadOneRecord("Select * From TestData Where name='XYZ' " );
      Assertion.AssertEquals("読み込み確認できなかった", "東京都", newData[2] );
    }
 }
}