首先,我在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;
}