C# 使用NUnit时出现NullReferenceException

C# 使用NUnit时出现NullReferenceException,c#,nunit,C#,Nunit,我试图为一个纸牌游戏应用程序设置单元测试,但我的代码抛出了一个NullReferenceException:对象引用未设置为对象的实例。据我所知,我不应该得到这个错误,但它是存在的 这是我的密码: [TestFixture] public class Tests { CardTable aTable = null; [SetUp] public void setup()

我试图为一个纸牌游戏应用程序设置单元测试,但我的代码抛出了一个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行被抛出,就好像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的快速版本无法附加到进程。