私は単体テストの周りに頭を抱えようとしていましたが、単体テストの処理には戻り値がパラメータの束に依存しているということに取り組んでいます。そこに多くの情報は、しかしだ、それは...複数の入力によるユニットテスト
は、次の点を考慮してビット圧倒的です:
私は価格のコレクションを持つクラスArticle
を、持っています。
public class Article
{
public string Id { get; set; }
public string Description { get; set; }
public List<Price> Prices { get; set; }
public Article()
{
Prices = new List<Price>();
}
public Price GetCurrentPrice()
{
if (Prices == null)
return null;
return (
from
price in Prices
where
price.Active &&
DateTime.Now >= price.Start &&
DateTime.Now <= price.End
select price)
.OrderByDescending(p => p.Type)
.FirstOrDefault();
}
}
PriceType
列挙型とPrice
クラス:
public enum PriceType
{
Normal = 0,
Action = 1
}
public class Price
{
public string Id { get; set; }
public string Description { get; set; }
public decimal Amount { get; set; }
public PriceType Type { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public bool Active { get; set; }
}
私はGetCurrentPrice
メソッドの単体テストを作成するにはいくつかのルールに基づいて、現在の価格を決定する方法GetCurrentPrice
を持っています。基本的には、発生する可能性のあるすべてのルールの組み合わせをテストしたいので、完全なカバレッジを得るためにさまざまな価格の組み合わせを含む複数の記事を作成する必要があります。
私はこのようなユニットテスト(擬似)と思っています:
[TestMethod()]
public void GetCurrentPriceTest()
{
var articles = getTestArticles();
foreach (var article in articles)
{
var price = article.GetCurrentPrice();
// somehow compare the gotten price to a predefined value
}
}
私は「複数の邪悪されている主張する」ことを読んだが、私は彼らがに を必要としませんすべての条件をここでテストしますか?または条件ごとに別のユニット テストが必要ですか?
単体テストに一連のテストデータを提供するにはどうすればよいですか? リポジトリを模擬すべきですか?そのデータには の期待値も含まれていますか?
この場合の「ユニット」とは何ですか?私は 'GetCurrentPrice'が適切に動作するかどうかを知りたいだけです。すべての異なる入力は「ユニット」であり、メソッドの正確さは、これらのユニットテストがすべて成功したことに依存しますか?それともメソッド自体が単位ですか? – diggingforfire
@diggingforfire、 'unit'はありません。しかし、それはあなたのコードが 'ユニット 'が存在しないように設計されているからです。あなたの 'Article'クラスは2つのことを行います:それはいくつかのデータを保持するプロパティを持ち、このデータを操作するメソッドを含んでいます。だからあなたはユニット2を単体でテストすることはできません。これらの責任を分けたければ 'GetCurrentPrice'を独立したリポジトリクラスに定義しておくと、' Article'インスタンスを引数として取ることができます。 –
それは貧血ドメインモデルにつながりませんか?私はその論理を含むために 'Article'自体を好むでしょう。 – diggingforfire