단위 테스트를 할 때마다 머리를 감싸려고 노력했으며 매개 변수 집합에 따라 반환 값이 달라지는 함수를 단위 테스트로 처리하려고합니다. 이 그러나 많은 정보 그리고 그것은 조금 압도적 ..여러 입력을 이용한 단위 테스트
다음과 같은 고려의 :
나는 가격의 컬렉션을 가진 클래스 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
}
}
내가 '악마 다수가 주장하는'읽었습니다,하지만 난 그들에게 필요하지 않습니다 :
나는 그런이 (의사)와 같은 단위 테스트를 생각하고 여기에서 모든 조건을 테스트 할 수 있습니까? 또는 조건 당 테스트 단위가 별도로 필요합니까? ?
단위 테스트에 일련의 테스트 데이터를 제공하는 방법은 무엇입니까? 저장소를 조롱해야합니까? 또한 해당 데이터에 예상 값이 포함되어야합니까?
이 경우 '단위'는 무엇입니까? GetCurrentPrice가 제대로 작동하는지 알고 싶습니다. 서로 다른 모든 입력이 '단위'입니까? 그리고 이러한 모든 단위 테스트가 통과하는 방식의 정확성은 무엇입니까? 아니면 방법 자체가 단위입니까? – diggingforfire
@diggingforfire에는 '단위'가 없습니다. 하지만 그것은 코드가 '단위'가 없도록 설계 되었기 때문입니다. 'Article' 클래스는 2 가지 작업을 수행합니다. 즉, 일부 데이터를 보유하는 속성이 있으며이 데이터를 조작하는 메서드가 포함되어 있습니다. 그래서 당신은 단위 테스트를 분리해서 수행 할 수 없습니다. 이러한 책임을 분리하고 싶다면 별도의 저장소 클래스에'GetCurrentPrice'를 정의하면'Article' 인스턴스를 인수로 사용할 수 있습니다. –
빈혈 도메인 모델로 이어지지 않습니까? 나는 그 논리를 포함하기 위해'Article' 자체를 선호 할 것이다. 그것은 단위 테스트를 조금 더 어렵게 만드는 것 같습니다. – diggingforfire