2012-05-07 46 views
-1

我正在嘗試爲卡片遊戲應用程序設置單元測試,但我的代碼正在拋出一個NullReferenceException:未將對象引用設置爲對象的實例。據我所知,我不應該得到這個錯誤,但它是。使用NUnit時的NRE

這裏是我的代碼:

 [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沒有實例化,即使它顯然是在[設置],我想不通爲什麼。當我刪除'act'調用時,測試通過,所以aTable 不能爲空或者測試也會在那裏失敗。

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

任何幫助,將不勝感激。 謝謝!

+1

請不要雙擊後。 –

+0

對原始問題的評論和回答完全沒有幫助。我總結了我的代碼,它實際上排除了問題的原因。當我能夠編輯代碼以顯示問題時,問題就顯得陳舊而且沒有被看到。當我轉發它時,我在5分鐘內得到了答案。 – peter9464

回答

0

我相信它在goldLabel.Text中您沒有在任何地方實例化窗體,因此窗體上的控件爲null。

作爲一般規則,您可能不希望測試在單元測試中將標籤設置爲值,而不是以某種方式模擬此對象或僅編寫一個測試值來設置值(但不是標籤的文字已更新。)

+0

這樣做!非常感謝你! – peter9464

1

您可能還想更改Assert.AreEqual(0, aTable.playerGold);中的值以使用get方法,而不是直接引用objects屬性。

因此,像

aTable.getPlayerGold()