raviyoshi
オープンソースのソースコードを読んだメモとか。
2008年8月7日木曜日
2008年8月2日土曜日
テストケースの位置
普段Javaで開発するとき、以下のような感じでテストクラスとテスト対象のクラスを分けています。
つまり、srcディレクトリ下にテスト対象のクラスを置き、testディレクトリ下にテストクラスを置きます。こうすることで、同じパッケージ下にテストクラスが存在し、かつテストクラスをテスト対象のクラスと分離できます。
NUnitによるユニットテストを行う場合は、上記のような分離ではなく、プロジェクト単位での分離が一般的なようです。(NUnit自体もそのようになっています)
C#では最終的な出力ファイルがexeやDLLなど単一のファイルにまとめられます。そのため、同一プロジェクトにテストクラスを混ぜてしまうと、テストクラスも出力ファイルに含まれてしまうからでしょうか。
---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プロジェクトへの依存が多いことがわかります。
さっそく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プロジェクトへの依存が多いことがわかります。
