在c#字典上循环的单元测试助手中的错误

时间:2015-04-20 15:27:53

标签: c# dictionary nunit

首先,我在c#中使用NUnit.framework来运行测试。我正在c#中建立一个纸牌游戏(游戏Dominion)。我正在尝试编写一个单元测试,测试当我将丢弃的堆放入我的牌组时,新的洗牌牌包含所有相同的牌。

我在一个帮助方法中收到一个错误,我写了比较,如果2个代表卡数的字典是等价的。 (Dictionary<Card, int>,其中Card是一个自定义类,每个实例都有一个id字段进行哈希处理,int是甲板中包含的卡数。{/ p>

现在,我在“之前”和“之后”的印刷品之间的线上得到NullReferenceException。这是辅助方法:

Assert.True语句中调用此代码,该语句是NUnit报告为有错误的行,但print语句“before”是在第一个循环中打印到控制台的最后一项(循环应该运行两次)。

我是c#的新手,我真的不明白这是怎么回事,所以我可以帮忙。

[edit]添加了单元测试代码。

[Test()]
public void testShuffledDeckContainsSameCards()
{
    ArrayList list = new ArrayList();
    Stack<Card> shuffledDeck;
    Dictionary<Card, int> cardCount;
    Dictionary<Card, int> expect = new Dictionary<Card,int>();
    for (int i = 0; i < 7; i++)
    {
        list.Add(new KingdomCards.Copper());
    }
    expect.Add(new KingdomCards.Copper(), 7);

    shuffledDeck = (Stack<Card>) Player.Shuffle(list);
    cardCount = countCards(shuffledDeck);
    //CompareCounts(expect, cardCount);

    list.Add(new KingdomCards.Estate());
    list.Add(new KingdomCards.Estate());
    list.Add(new KingdomCards.Estate());
    expect.Add(new KingdomCards.Estate(), 3);

    shuffledDeck = (Stack<Card>) Player.Shuffle(list);
    cardCount = countCards(shuffledDeck);
    Assert.True(CompareCounts(expect, cardCount));
}

private static bool CompareCounts(Dictionary<Card, int> expect, Dictionary<Card, int> cardCount)
{
    foreach (KeyValuePair<Card, int> entry in 
    {
        Console.WriteLine("Entry:");
        Console.WriteLine("card " + entry.Key.getID() + ", count " + entry.Value);
        Console.WriteLine("expected:");
        if (!cardCount.ContainsKey(entry.Key))
        {
            return false;
        }
        Console.WriteLine("before");
        Console.WriteLine("card " + entry.Key.getID() + ", count " + cardCount[entry.Key]);
        Console.WriteLine("after");
        Console.WriteLine();
        if (!(entry.Value == cardCount[entry.Key]))
        {
            return false;
        }
    }
    return true;
}

0 个答案:

没有答案