私は常にアプリケーションレベルのコードとフレームワークレベルのコードを区別しようとする習慣があるため、頻繁に説明する問題に遭遇しました。通常、アプリケーションレベルのコードをテストする前に、すべてのフレームワークレベルのコードをテストする。また、フレームワークレベルのコード内であっても、他のすべてのフレームワークモジュールで使用されるいくつかの基本的なフレームワークモジュールが存在する傾向があります。基本的に何かが失敗しても、他のテストはまったく意味がありません。
残念ながら、テストフレームワークの提供者は、その作成物がどのように使用されるのかについてある程度厳格なアイデアを持っている傾向があり、それらのアイデアをかなり保護していますが、フレームワークを使用する人々は質問することなく意図した使用を受け入れる傾向があります 実験と革新を抑制するため、これには問題があります。私は他の人については知りませんが、奇妙な方法で何かをしようとする自由があり、結果が確立された方法よりも良いか悪いかを自分で確かめたいのです。そもそも自分のやり方で物事を行う。
したがって、私の意見では、テストの依存関係は素晴らしいものであり、その代わりに、テストを実行する順序を指定する機能が次善の策です。
テストの順序付けの問題に対処するために見つけた唯一の方法は、テストフレームワークがアルファベット順にテストを実行する傾向を利用するために、慎重に命名することです。
これがVisual Studioでどのように機能するかはわかりません。C#での広範なテストを行う必要があるためです。しかし、Javaの世界では次のように機能します。プロジェクトのソースフォルダーの下には、通常2つのサブフォルダーがあり、生産コードを含む「メイン」と呼ばれるものと、テストコードを含む「テスト」と呼ばれるものです。「メイン」の下に、ソースコードのパッケージ階層に正確に対応するフォルダー階層があります。Javaパッケージは、C#名前空間にほぼ対応しています。C#では、フォルダー階層を名前空間階層に一致させる必要はありませんが、そうすることをお勧めします。
現在、Javaの世界で通常行われているのは、「テスト」フォルダーの下で「メイン」フォルダーの下にあるフォルダー階層をミラーリングすることです。したがって、各テストは、テストするクラスとまったく同じパッケージに存在します。この背後にある理論的根拠は、テストクラスがテスト対象クラスのパッケージプライベートメンバーにアクセスする必要があることが非常に多いため、テストクラスはテスト対象クラスと同じパッケージにある必要があるということです。世界のC#側には、名前空間ローカルの可視性などはありません。したがって、フォルダー階層をミラーリングする理由はありませんが、C#プログラマーは、フォルダーを構造化する際にほぼ同じ規律に従うと思います。
いずれにせよ、実装ではなくインターフェイスをテストする傾向があるため、テストクラスがテスト対象クラスのパッケージローカルメンバにアクセスできるようにするというこの考え全体は見当違いです。そのため、テストのフォルダー階層は、実動コードのフォルダー階層をミラーリングする必要はありません。
だから、私がやることは、私のテストのフォルダ(つまり、パッケージ)に次のように名前を付けることです:
t001_SomeSubsystem
t002_SomeOtherSubsystem
t003_AndYetAnotherSubsystem
...
これにより、「SomeSubsystem」のすべてのテストが「SomeOtherSubsystem」のすべてのテストの前に実行され、さらに「AndYetAnotherSubsystem」などのすべてのテストの前に実行されることが保証されます。
フォルダー内では、個々のテストファイルの名前は次のとおりです。
T001_ThisTest.java
T002_ThatTest.java
T003_TheOtherTest.java
もちろん、最新のIDEが強力なリファクタリング機能を備えているため、パッケージ全体(およびすべてのサブパッケージ、およびそれらを参照するすべてのコード)を数回のクリックとキーストロークで名前変更できます。