C# 使用NUnit时出现NullReferenceException
我试图为一个纸牌游戏应用程序设置单元测试,但我的代码抛出了一个NullReferenceException:对象引用未设置为对象的实例。据我所知,我不应该得到这个错误,但它是存在的 这是我的密码:C# 使用NUnit时出现NullReferenceException,c#,nunit,C#,Nunit,我试图为一个纸牌游戏应用程序设置单元测试,但我的代码抛出了一个NullReferenceException:对象引用未设置为对象的实例。据我所知,我不应该得到这个错误,但它是存在的 这是我的密码: [TestFixture] public class Tests { CardTable aTable = null; [SetUp] public void setup()
[TestFixture]
public class Tests
{
CardTable aTable = null;
[SetUp]
public void setup()
{
aTable = new CardTable();
}
[Test]
public void setPlayerGold_setTo0_return0()
{
//arrange
//act
aTable.setPlayerGold(0);
//assert
Assert.AreEqual(0, aTable.playerGold);
}
}
public class CardTable
{
int playerGold;
public CardTable()
{
playerGold = 0;
}
public void setPlayerGold(int amount)
{
if (amount == 0)
{
playerGold = 0;
}
else
{
playerGold += amount;
}
goldLabel.Text = playerGold + "";
}
异常在aTable.setup行被抛出,就好像aTable没有被实例化一样,尽管它显然在[setup]中,我不知道为什么
我正在使用NUnit 2.6.0.12051运行Visual C#2010 Express v10.0.40219.1 SP1Rel
任何帮助都将不胜感激。
谢谢 启动NUnit,但不要运行测试。在VisualStudio中,确保打开了包含nunit测试的项目。然后在VisualStudio中按ctrl+alt+p。这将显示要附加到的进程列表。选择nunit-agent.exe进程。如果有多个nunit-agent.exe进程,可以按住ctrl键并选择所有进程。您可能必须检查所有会话中的显示进程和/或所有用户的显示进程,才能显示nunit-agent.exe。此时,您应该能够调试测试 现在,您可以在构造函数调用
CardTable
时设置断点。当您逐步通过调试器时,您应该能够识别空对象引用错误
单步执行代码的另一种方法是在菜单Debug->Exceptions中选择。。。在显示的对话框中,选中公共语言运行时异常旁边的抛出框。这将导致调试器在抛出任何已处理或未处理的执行时停止。这样就不需要断点,但如果抛出的异常被捕获,则可能比上面的断点方法更麻烦 安装程序似乎是您的问题,并且在您需要时不会调用它 我建议这样做:
CardTable aTable = new CardTable();
这样它就不会为空。我也遇到了同样的问题,我已经将NUnit framework版本从3.7.1回滚到3.0.5,现在所有版本都可以正常工作。
也许您应该回滚到NUnit framework的早期版本。在调试过程中,是否调用了安装程序?我们可以看到CardTable类的代码吗?看起来这个安装程序崩溃了。@ykatchou,CardTable类不是问题,因为它在运行时工作正常。问题是,NUnit认为永远不会创建CardTable数据表。此外,这不是真正的21点和CardTable是大约3000行代码…你确定这是你的代码吗
player.hand.addCard(新卡(11);
缺少一个括号…您确定在安装过程中确实创建了CardTable吗?ctrl+alt+p快捷键没有弹出任何内容。我使用的是VS的快速版本,这有什么不同吗?@peter9227是的,visual studio的快速版本无法附加到进程。