最近、BDD と TDD について読み始めて、夢中になりました。整理されていない大量の情報源と、何が最善で何がそうでないかについてのさまざまな意見に戸惑いました。最後に、xBehave と xUnitに落ち着きました。流暢な構文と、流暢なアサーションと流暢な検証を使用した動作の定義の容易さが気に入っています。
また、学習のために取り組んでいるテスト プロジェクトでタマネギ アーキテクチャを実装しようとしています。私のシナリオは次のとおりです。プロジェクトは、簡単にするために製品トラッカーです。製品を作成し、誰がそれを所有しているかを追跡できます。私は2つの仕様を実装したい:
- 名前なしで新しい製品が作成されると、エラーが表示されます
- 所有者を割り当てずに新しい製品を作成すると、エラーが表示されます。
新しい Product と新しい ProductService をインスタンス化する仕様を作成し、それによってさらに Product が作成されました。仕様に合格し、検証が行われています。問題は次のとおりです。
- ProductRepository クラスをテストするにはどうすればよいですか? 次にテストするか、それともモックを作成して最初にすべての仕様を完成させてから、戻ってリポジトリ クラスをテストしますか?
- 最初の仕様で ProductService クラスをモックする必要がありましたか?
- それは単体テストレベルで行われていますか?単体テスト クラスを作成する必要がありますか?
- リポジトリをテストすると、統合テストになりませんか?
今のところ UI はなく、ドメイン、サービス、およびインフラストラクチャ レイヤーの仕様を書いています。
- UI テストに watin を使用する必要がありますか?
- watin/specflow に切り替えることはより理にかなっており、レイヤーを上から下まで完全にテストするための労力を節約できますか?
これが私が取り組んだ仕様の1つです。
[Scenario]
public void creating_new_product_without_a_name_should_throw_error()
{
var productService = default(IProductService);
var action = default(Action);
_
.Given("a new product", () =>
productService = new ProductService() as IProductService)
.When("creating the new product without a name", () =>
action = () => productService.Create(new Product()))
.Then("it should should display an error", () =>
action.ShouldThrow<ValidationException("Name is required."));
}
事前に返信いただきありがとうございます。このスレッドに返信する場合は、いくつかの資料/記事/サンプル コードを使用して、提案に従う方がよい理由を説明してください。