-1

カード ゲーム アプリケーションの単体テストをセットアップしようとしていますが、コードが NullReferenceException: Object reference not set to 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 + "";
            }

[Setup] に明らかにあったにもかかわらず、aTable がインスタンス化されていないかのように、aTable.setup 行で例外がスローされ、その理由がわかりません。「act」呼び出しを削除すると、テストに合格するため、aTableを null にすることはできません。そうしないと、そこでもテストが失敗します。

NUnit 2.6.0.12051 で Visual C# 2010 Express v10.0.40219.1 SP1Rel を実行しています。

どんな助けでも大歓迎です。ありがとう!

4

2 に答える 2

1

Assert.AreEqual(0, aTable.playerGold);オブジェクト プロパティを直接参照する代わりに、get メソッドを使用するように値を変更することもできます。

だから何か

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

私はそれがgoldLabel.Textにあると信じています。どこにもフォームをインスタンス化していないので、フォームのコントロールはnullです。

原則として、単体テストでラベルが値に設定されていることをテストしたくないでしょう。代わりに、何らかの方法でこのオブジェクトをモックするか、値が設定されていることをテストするだけです (ただし、ラベルのテキストが更新されていることはテストしません)。 .)

于 2012-05-07T13:22:03.183 に答える