-1

我正在尝试为纸牌游戏应用程序设置单元测试,但我的代码抛出 NullReferenceException: Object reference not set to an instance of an object。据我所知,我不应该收到此错误,但确实存在。

这是我的代码:

        [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] 中,我不知道为什么。当我删除“act”调用时,测试通过,所以 aTable不能为空,否则测试也会在那里失败。

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

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

4

2 回答 2

1

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

所以像

aTable.getPlayerGold()
于 2012-05-07T13:29:32.227 回答
0

我相信它在 goldLabel.Text 您没有在任何地方实例化表单,因此表单上的控件为空。

作为一般规则,您可能不想在单元测试中测试标签是否设置为某个值,而是以某种方式模拟此对象或只是编写一个设置了值的测试(但不是更新标签的文本.)

于 2012-05-07T13:22:03.183 回答