使用NUnit时出现NullReferenceException

我正在尝试为纸牌游戏应用程序设置unit testing,但是我的代码抛出了NullReferenceException:对象引用没有设置为对象的实例。 据我所知,我不应该得到这个错误,但它确实存在。

这是我的代码:

[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行抛出exception,好像aTable没有实例化,即使它显然在[Setup]中,我也无法找出原因。

我正在使用NUnit 2.6.0.12051运行Visual C#2010 Express v10.0.40219.1 SP1Rel。

任何帮助,将不胜感激。 谢谢!

启动NUnit,但不要运行测试。 在visual studio中,确保您拥有包含nunit测试的项目。 然后在visual studio中按ctrl + alt + p。 这将显示要附加到的进程列表。 选择nunit-agent.exe进程。 如果有多个nunit-agent.exe进程,您可以按Ctrl +选择所有这些进程。 您可能必须检查所有会话中显示进程和/或显示所有用户的进程以显示nunit-agent.exe。 此时,您应该能够调试测试。

现在,您可以在对CardTable的构造函数调用中设置断点。 在单步执行调试器时,您应该能够识别出空对象引用错误。

单步执行代码的另一种方法是在对话框的Debug-> Exceptions菜单中选择,该对话框显示检查Common Language Runtime Exceptions旁边的抛出框。 这将导致调试器在抛出它们时处理或未处理的任何exec停止。 这消除了对断点的需要,但是如果您捕获的exception被捕获,则可能比上面的断点方法更麻烦。

看起来设置是您的问题,并且在您需要它时不会被调用。

我建议这样做:

 CardTable aTable = new CardTable(); 

这样它就永远不会为空。

我有同样的问题,我已经将NUnit框架版本从3.7.1回滚到3.0.5,现在所有工作都没有例外。 也许您应该回滚到之前版本的NUnit框架之一。