[英]Unit Test case using Assert
我要解决的情况是从卡组中抽出指定数量的卡,然后按排序顺序将它们退回(先按西装,再按面值)。
<param name="howMany">how many cards to draw.
<returns>a list of drawn cards, sorted by suit and face value (rank)</returns>
我已经为实现该方法编写了代码,我必须为此编写一个单元测试代码。 对此有什么可能的单元测试,因为它具有要比较的列表以及如何实现此目的。
public List<Card> DrawSorted(int howMany)
{
List<Card> drawnCards = _cards.Take(howMany).ToList();
IEnumerable<Card> sortedCards = from card in drawnCards
orderby card.Order ascending
select card;
return sortedCards.ToList();
}
任何帮助深表感谢
您应该使测试尽可能简单,并且可能应该在此处进行多个测试:
一些粗略的想法:
一种检查订购的简单方法是,仅抽取一小张卡片(也许只有两张?),然后进行比较。 这样一来,您就可以使测试逻辑尽可能短而简单,同时在出现问题时仍然能够发出警告。
当然,更好的过程是以测试的形式指定最简单的需求,然后逐步将它们提高一点,同时为您的方法添加逻辑。 然后,您可能会有名为以下名称的测试(您可能猜出它们可能包含的内容):
public void should_return_correct_nr_of_cards(){ ... }
public void should_return_presorted_cards_in_correct_order(){ ... }
public void should_return_unsorted_cards_sorted(){ ... }
您必须问的第一个问题是“我要测试什么?”。 您是否正在测试所有卡都不同? 您是否正在测试当您抽出更多的牌时会发生什么? 我自己会同时测试这两种情况(以及其他一些极端情况)。
您要做的第二件事是提供某种机制来模拟可从中抽奖的牌列表。 为了使测试有价值,您需要每次都能设置测试条件。
我的建议是像这样创建测试类:
public class Deck
{
private List<Card> _cards;
public Deck(List<Card> allCards)
{
_cards = allCards;
}
public List<Card> DrawSorted(int howMany)
{
List<Card> drawnCards = _cards.Take(howMany).ToList();
IEnumerable<Card> sortedCards = from card in drawnCards
orderby card.Order ascending
select card;
return sortedCards.ToList();
}
}
在您的测试课程中,您可以输入要用于测试的卡片的完整列表。
根据测试框架的不同,您使用测试本身也会有所不同。 但这是一个例子:
[Test]
public void CheckCorrectNumberOfCardsAreReturned()
{
List<Card> allCards = GenerateDeck();
var deck = new Deck(allCards);
var drawnCards = deck.DrawSorted(5);
Assert.AreEqual(5, drawnCards.Count());
}
为了使您的测试真正有价值,如果您尝试抽出55张卡片会发生什么? 您应该得到55还是52(假设是一副标准的纸牌)?
如果我的allCard中有重复项,我在抽签时应该得到重复项还是应该将其删除?
测试直接与需求联系在一起- 确定您的方法应该做什么并设计测试以确保您的代码符合要求 。
最后几点:
我希望这有帮助!
我认为一种可能的单元测试是在调用DrawSorted之后检查结果是否已经排序。
我将创建另一个称为IsSorted的方法,返回一个布尔值,然后使用此方法测试输出。
就像是:
bool expectedAnswer = true;
List<Cards> list = yourClass.DrawSorted(15);
bool result = yourClass.IsSorted(list);
Assert.AreEqual(expectedResult, result);
或类似的东西。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.