C# 单元测试帮助程序在c字典上循环时出错
首先,我使用c中的NUnit.framework来运行测试。我正在制作一个纸牌游戏,游戏名称是c。我正在尝试编写一个单元测试,测试当我将弃牌堆洗牌到我的牌组中时,新洗牌牌组包含所有相同的牌 我写的一个helper方法中出现了一个错误,该方法用于比较表示卡片计数的两个字典是否相等。Dictionary,其中Card是一个自定义类,由每个实例的id字段散列,int是一个组包含的卡的数量 现在,我在打印之前和之后的行上得到一个NullReferenceException。以下是帮助器方法: 此代码是从Assert.True语句中调用的,NUnit报告该行有错误,但前面的print语句是第一个循环中最后一个要打印到控制台的语句,循环应该运行两次 我是c新手,我不太明白这是怎么回事,所以我需要一些帮助 [编辑]添加了单元测试代码C# 单元测试帮助程序在c字典上循环时出错,c#,dictionary,nunit,C#,Dictionary,Nunit,首先,我使用c中的NUnit.framework来运行测试。我正在制作一个纸牌游戏,游戏名称是c。我正在尝试编写一个单元测试,测试当我将弃牌堆洗牌到我的牌组中时,新洗牌牌组包含所有相同的牌 我写的一个helper方法中出现了一个错误,该方法用于比较表示卡片计数的两个字典是否相等。Dictionary,其中Card是一个自定义类,由每个实例的id字段散列,int是一个组包含的卡的数量 现在,我在打印之前和之后的行上得到一个NullReferenceException。以下是帮助器方法: 此代码是从
[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