C# 单元测试帮助程序在c字典上循环时出错

C# 单元测试帮助程序在c字典上循环时出错,c#,dictionary,nunit,C#,Dictionary,Nunit,首先,我使用c中的NUnit.framework来运行测试。我正在制作一个纸牌游戏,游戏名称是c。我正在尝试编写一个单元测试,测试当我将弃牌堆洗牌到我的牌组中时,新洗牌牌组包含所有相同的牌 我写的一个helper方法中出现了一个错误,该方法用于比较表示卡片计数的两个字典是否相等。Dictionary,其中Card是一个自定义类,由每个实例的id字段散列,int是一个组包含的卡的数量 现在,我在打印之前和之后的行上得到一个NullReferenceException。以下是帮助器方法: 此代码是从

首先,我使用c中的NUnit.framework来运行测试。我正在制作一个纸牌游戏,游戏名称是c。我正在尝试编写一个单元测试,测试当我将弃牌堆洗牌到我的牌组中时,新洗牌牌组包含所有相同的牌

我写的一个helper方法中出现了一个错误,该方法用于比较表示卡片计数的两个字典是否相等。Dictionary,其中Card是一个自定义类,由每个实例的id字段散列,int是一个组包含的卡的数量

现在,我在打印之前和之后的行上得到一个NullReferenceException。以下是帮助器方法:

此代码是从Assert.True语句中调用的,NUnit报告该行有错误,但前面的print语句是第一个循环中最后一个要打印到控制台的语句,循环应该运行两次

我是c新手,我不太明白这是怎么回事,所以我需要一些帮助

[编辑]添加了单元测试代码

[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;
}

你能发布完整的测试方法吗?好的,我想我看到了。无法保证cardCount包含密钥项。密钥即您的cardCount字典不包含您期望的卡片缺少关键部分:在what中的每个KeyValuePair条目?很容易将其标记为的副本,因为这就是它的本质。您可以使用的调试工具应该可以帮助您快速修复此问题。请查看此处以获取信息,并在调试器中检查该行上的每个对象,以查看哪个对象实际为null,然后找出为什么为null