VS2005 TS データ駆動ユニットテストとやら
VS2005のデータ駆動ユニットテストやらを試してみました。
検証した流れを載せておきます。
1. データベース作成
データベースはOLEDBで接続できれば何でもOKです。
DBじゃなくてCSVファイルを使うのもアリですね。
2. テーブル作成
テーブルスキーマは特に決まってないですが、私は下記のようなテーブル作ってみました。
フラットなテーブルで作る点がポイントですね。
CREATE TABLE [dbo].[HelloWorldTestCase](
[id] [int] IDENTITY(1,1) NOT NULL,
[result] [nvarchar](50) COLLATE Japanese_CI_AS NULL,
[var1] [int] NULL,
[var2] [nvarchar](50) COLLATE Japanese_CI_AS NULL
) ON [PRIMARY]
3.テストデータ作成
作成したテーブルにテストデータを投入します。
こんな感じで。
id, result, var1, var2
--------------------------------------
1, "Hello", 1, "Hello"
2. "World", 2, "World"
4.ユニットテスト作成
ユニットテストを作成します。
普通のユニットテストに加えて、TestContextプロパティを
追加することとDataSource属性を使用します。
今回はSQL Serverを使ったので、SqlClientを指定し
接続文字列を渡しています。後はテーブル名と
シーケンシャルアクセスかランダムアクセスの指定です。
--------------------------------------
[TestClass]
public class DataDrivenUnitTest
{
private TestContext testContextInstance;public TestContext TestContext
{
get { return testContextInstance; }
set { testContextInstance = value; }
}[TestMethod]
[DataSource("System.Data.SqlClient", "Data Source=localhost;Integrated Security=SSPI;Initial Catalog=DataDrivenUnitTest;", "HelloWorldTestCase", DataAccessMethod.Sequential)]
public void HelloWorldメソッドを呼び出す()
{
int testCaseId = (int)TestContext.DataRow["id"];
string result = (string)TestContext.DataRow["result"];
int var1 = (int)TestContext.DataRow["var1"];
string var2 = (string)TestContext.DataRow["var2"];TargetClass target = new TargetClass();
Assert.AreEqual( result, target.HelloWorld(var1, var2) );
}
}
--------------------------------------
5. テスト実行
テストを実行すると、作成したテストデータ数の回数分、テストメソッドが呼び出されます。
全部のパターンのテストデータが正常に完了したらテスト完了となります。
最初動きがわからずに、1万件ぐらいデータ件数があるテーブルに接続しちゃったんで、
テストが全く動きませんでした(^^;;
... とこんな感じです。
これを使えるうまいシナリオがちょっと浮かばない感じです。微妙な感じですね。
DBの接続先は、テスト実行時にテストメソッドのプロパティで変更できるので、
使い道はいろいろあるかと思います。
良いアイデアが浮かばないなぁ...