Я пытался обернуть голову вокруг модульного тестирования, и я пытаюсь разобраться с модульным тестированием функции, возвращаемое значение которой зависит от набора параметров. Однако информации много, и это немного ошеломляет ..
Обратите внимание на следующее:
У меня есть класс Article
, в котором есть коллекция цен. У него есть метод GetCurrentPrice
, который определяет текущую цену на основе нескольких правил:
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
. По сути, я хочу протестировать все комбинации правил, которые могут возникнуть, поэтому мне пришлось бы создать несколько статей, содержащих различные комбинации цен, чтобы получить полное покрытие.
Я думаю о модульном тесте, таком как этот (псевдо):
[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
}
}
Я читал, что «множественные утверждения являются злом», но мне не нужно
их проверить все условия здесь? Или мне нужен отдельный блок
тест по условию?
Как бы я предоставил модульному тесту набор тестовых данных?
Должен ли я издеваться над хранилищем? И если эти данные также включают
ожидаемые значения?