raviyoshi

オープンソースのソースコードを読んだメモとか。

2008年8月7日木曜日

ストリームのテスト

NUnitでは、ストリームのテストをするとき、ストリームの内容の一致判定を行います。

例えば、テスト対象のクラスがa.txtを開いているFileStreamをメンバとして持っているとします。このとき、a.txtを開く別のFileStreamインスタンスとAssert.areEquals()で比較させてみると、ちゃんとパスします。また、別のファイルでも内容が同じならばパスします。

JUnitではオブジェクトIDによる判定を行うので、同じように書くと失敗します。

ちなみに、Listは持っている要素が同じかどうかで確認します。これはJUnitと同じです。

ラベル: ,

2008年8月2日土曜日

テストケースの位置

普段Javaで開発するとき、以下のような感じでテストクラスとテスト対象のクラスを分けています。

---src
| |-package1
| |-ClassA.java
| |-ClassB.java
|-test
|-package1
|-ClassATest.java
|-ClassBTest.java


つまり、srcディレクトリ下にテスト対象のクラスを置き、testディレクトリ下にテストクラスを置きます。こうすることで、同じパッケージ下にテストクラスが存在し、かつテストクラスをテスト対象のクラスと分離できます。

NUnitによるユニットテストを行う場合は、上記のような分離ではなく、プロジェクト単位での分離が一般的なようです。(NUnit自体もそのようになっています)

C#では最終的な出力ファイルがexeやDLLなど単一のファイルにまとめられます。そのため、同一プロジェクトにテストクラスを混ぜてしまうと、テストクラスも出力ファイルに含まれてしまうからでしょうか。

ラベル: ,

2008年7月26日土曜日

NUnit 2.4.8を読んでみる

C#について学ぶために、NUnitのソースを読んでみることにしました。NUnitは.NET Framework用のテスティングフレームワークです。

さっそくNUnit 2.4.8のソースコードをダウンロードしたところ、VS.NET 2003用と2005用のソリューションが含まれていました。今回は2005の方を使って読んでみます。

ソリューションは29ものプロジェクトからなります。しかし、それらの中にはNUnitのユニットテスト用のプロジェクトやサンプルのプロジェクトが含まれています。そのため、NUnit本体のプロジェクトはその1/3くらいです。NUnit本体のプロジェクトの依存関係を図にしてみました。
プロジェクト名の末尾の"_VS2005"は省略しました。

図中のnunit-gui.exeプロジェクトがGUIのテストランナーのexeファイルを出力するプロジェクトです。

NUnitはGUI版のテストランナーだけでなく、CUI版もあります。CUI版のテストランナーはnunit-console.exeプロジェクトから出力されます。GUI版と参照関係が似ているので、図には含めませんでした。

また、nunit.framework.dllプロジェクトとnunit.framework.extensions.dllプロジェクトは、テストクラスを作成する際に参照するDLLを出力するプロジェクトです。

図より、nunit.core.dllプロジェクトやnunit.core.interfaces.dllプロジェクトへの依存が多いことがわかります。

ラベル: ,