TDD を私の単純なプロジェクトに適用して学習しようとしています。詳細(および以前の質問)は次のとおりです。
具体的には、PurchaseOrders のプライベート リスト (コンストラクターで渡される) を持つ PurchaseOrderCollection クラスがあり、PurchaseOrders にはブール値のプロパティ IsValid があります。PurchaseOrderCollection には、リスト内のいずれかの PurchaseOrders の IsValid が false の場合に true を返す HasErrors プロパティがあります。これが私がテストしたいロジックです。
[TestMethod]
public void Purchase_Order_Collection_Has_Errors_Is_True_If_Any_Purchase_Order_Has_Is_Valid_False()
{
List<PurchaseOrder> orders = new List<PurchaseOrder>();
orders.Add(new PurchaseOrder(--some values to generate IsValid false--));
orders.Add(new PurchaseOrder(--some values to generate IsValid true--));
PurchaseOrderCollection collection = new PurchaseOrderCollection(orders);
Assert.IsTrue(collection.HasErrors);
}
これは私の前の質問と似ていますが、このテストは結合されすぎているという点で、テストに合格するために PurchaseOrder IsValid を false または true にするロジックを知る必要があります。クラス自体が問題ではないという点で、質問は異なります(imo)。
基本的に、IsValid が false または true である PurchaseOrder を、PurchaseOrder とは何かを知らなくても宣言できるようにしたいと考えています。
私の限られた TDD の知識から、これはスタブまたはモックを使用するものです。私の主な質問は、これは正しいですか? または、これには別の方法を使用する必要がありますか? それとも、私は完全に欠陥があり、このテストを書いて間違って考えているだけですか?
私が最初に考えたのは、ある種のモック フレームワークを使用して、常に true または false を返す PurchaseOrder を作成することでした。私が読んだことから、 IsValid virtual を宣言する必要があります。2 番目に考えたのは、PurchaseOrder のインターフェイスとして IPurchaseOrder を追加し、常に false または true を返す偽の PurchaseOrder を作成するように変更することでした。これらは両方とも有効なアイデアですか?
ありがとう!