NRE when using NUnit

本文关键字:NUnit using when NRE | 更新日期: 2023-09-27 18:33:20

>我正在尝试为纸牌游戏应用程序设置单元测试,但我的代码抛出 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] 中,我也不知道为什么。当我删除"act"调用时,测试通过,因此 aTable 不能为空,否则测试也会在那里失败。

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

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

NRE when using NUnit

您可能

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

所以像

aTable.getPlayerGold()
我相信

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

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