テストは、ある種のユースケースから導き出す必要があります。面白いことに、最初にクラスを紹介し、次にTDDに逆行するテストの作成について話しました。
ユースケースはテストに通知し、テストはコードに通知します。あなたのユースケースが「私のAPIのユーザーがPartQty
任意の整数に呼び出されるプロパティを設定し、常に設定した整数を取り戻すことができる」ということは非常に疑わしいです。int.MaxValue
それが実際のユースケースである場合は、とをチェックする単体テストを作成しますint.MinValue
。ただし、これらが実際の値になることはめったにありません。
実際のユースケースは次のようになります。「私のAPIのユーザーは、インジェクションをBib
通知し、を4IFlugleBinder
に設定してから、メソッドを呼び出します。これにより、インスタンスのメソッドが4回呼び出されます。」それがユースケースである場合、テストは非常に異なって見えます。PartQty
Execute
Bind
IFlugleBinder
Bib
正直なところ、それはある種のDTOにすぎないように見えます。私の経験では、ほとんどのDTOは、より高いレベルのユースケースの成果物にすぎません。APIが提供する関数呼び出しの結果としてDTOが返される場合は、実際にはインターフェイスを返す必要があり、DTOクラス自体はプライベートである必要があります。この場合、明示的にテストする必要はありません(プロパティをテストするだけです)。メソッド呼び出しから得られる実際の結果の)。同様に、公開されていない内部DTOの場合は、公開しないでください。ユーザーが値のバンドルを提供する必要がある場合は、APIがインターフェースを受け入れる必要があります。次のように、ユーザーがインターフェイスを実装する独自のクラスを定義するか、不変のクラスを提供できるようにします。
public class Bib : IBib
{
public Bib(int partQty)
{
PartQty = partQty;
}
public int PartQty { get; private set; }
}
次に、ペダンティックになりたい場合にコンストラクターが機能するかどうかを確認するテストを作成できますが、それほど重要ではありません。