2012-05-07 31 views
1

我想设置卡游戏应用程序的单元测试,但我的代码是抛出一个NullReferenceException:对象引用未设置为对象的实例。据我所知,我不应该得到这个错误,但它是。NullReferenceException当使用NUnit

这里是我的代码:

 [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没有实例化,即使它显然是在[设置],我想不通为什么。

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

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

+1

调试过程中,设置是否被调用? –

+0

我们可以看到CardTable类的代码吗?看来这个设置崩溃了。 – ykatchou

+0

@ykatchou,CardTable类不是问题,因为它运行时工作正常。问题是NUnit认为CardTable aTable从未被创建过。此外,这不是真正的BlackJack和CardTable是大约3000行代码... – peter9464

回答

0

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

现在您可以在构造函数调用CardTable处设置断点。当你逐步调试器时,你应该能够识别你的空对象引用错误。

来逐步执行代码的替代方案是在菜单调试 - >例外...表示检查旁公共语言运行库异常抛出框在对话框中进行选择。这会导致调试器在处理或未处理任何处理时停止。这消除了对断点的需要,但是如果你有被捕获的异常被抛出,它可能比上面的断点方法更麻烦。

+0

ctrl + alt + p快捷键并没有拉起任何东西。我正在使用VS的快速版本,这是否有所作为? – peter9464

+0

@ peter9227是的,Visual Studio的高级版本无法附加到进程。 – McKay

0

它看起来像安装程序是你的问题,并且它不会在你想要的时候被调用。

我建议这样做:

CardTable aTable = new CardTable(); 

这样,它永远不会为空。

0

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

相关问题