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 + "";
            }

aTable がインスタンス化されていないかのように、aTable.setup 行で例外がスローされます。これは [Setup] に明確に含まれていましたが、その理由がわかりません。

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

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

4

3 に答える 3

0

セットアップが問題のようですが、必要なときに呼び出されていません。

これを行うことをお勧めします:

CardTable aTable = new CardTable();

そうすれば、null になることはありません。

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

NUnit を開始しますが、テストは実行しません。Visual Studio で、nunit テストを含むプロジェクトが開いていることを確認します。次に、ビジュアル スタジオで ctrl+alt+p を押します。これにより、アタッチするプロセスのリストが表示されます。nunit-agent.exe プロセスを選択します。複数の nunit-agent.exe プロセスがある場合は、ctrl+ を押してそれらすべてを選択できます。nunit-agent.exe を表示するには、[ Show processes in all sessions ]および/または[ Show processes from all users ]を確認する必要がある場合があります。この時点で、テストをデバッグできるはずです。

へのコンストラクター呼び出しでブレークポイントを設定できるようになりましたCardTable。デバッガーをステップ実行すると、null オブジェクト参照エラーを特定できるはずです。

コードをステップ実行する代わりに、メニューDebug->Exceptions...を選択して、 Common Language Runtime Exceptionsの横にあるスローされたボックスをチェックするダイアログを表示します。これにより、デバッガーは、例外がスローされたときに処理または未処理で停止します。これにより、ブレークポイントが不要になりますが、キャッチされる例外がスローされた場合、上記のブレークポイント メソッドよりも手間がかかる場合があります。

于 2012-05-07T12:48:17.493 に答える