繁体   English   中英

使用断言的单元测试用例

[英]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中有重复项,我在抽签时应该得到重复项还是应该将其删除?

测试直接与需求联系在一起- 确定您的方法应该做什么并设计测试以确保您的代码符合要求

最后几点:

  • 一项测试应该测试一种情况/行为,这通常会导致每种方法进行多次测试
  • 测试应具有已知的开始条件(您可以配置平台以提供所需的测试条件)
  • 测试应该是可重复的,对诸如随机数之类的东西要当心。 从两个卡组中抽出一张随机卡,并检查它们是否不相同? 他们可能是1/52! 这些测试是诊断的噩梦。

我希望这有帮助!

我认为一种可能的单元测试是在调用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM