Вопрос по c# – NullReferenceException при использовании NUnit

1

Я пытаюсь настроить модульные тесты для приложения для карточной игры, но мой код выдает исключение 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], и я не могу понять, почему.

Я использую Visual C # 2010 Express v10.0.40219.1 SP1Rel с NUnit 2.6.0.12051.

Любая помощь будет оценена. Спасибо!

Вы уверены, что это ваш код?player.hand.addCard(new Card(11); отсутствует скобка .... Peter K.
во время отладки вызывается ли установка? Shawn Mclean
Вы уверены, что CardTable действительно создается во время установки? ykatchou
Можем ли мы увидеть код класса CardTable? Кажется, эта установка вылетает. ykatchou
@ykatchou, класс CardTable не является проблемой, так как он отлично работает при запуске. Проблема в том, что NUnit считает, что CardTable aTable никогда не создается. Кроме того, это не совсем BlackJack и CardTable составляет около 3000 строк кода ... peter9464

Ваш Ответ

3   ответа
0

У меня была такая же проблема, и я откатил версию фреймворка NUnit с 3.7.1 до 3.0.5, и теперь все работает без исключений. Может быть, вам стоит вернуться к одной из предыдущих версий фреймворка NUnit.

0

Похоже, что установка - это ваша проблема, и она не вызывается, когда вы этого хотите.

Я рекомендую сделать это:

CardTable aTable = new CardTable();

Таким образом, он никогда не будет нулевым.

0

Запустите NUnit, но не запускайте тесты. В visual studio убедитесь, что у вас открыт проект, содержащий ваши тесты nunit. Затем в визуальной студии нажмите Ctrl + Alt + P. Это выведет список процессов, к которым нужно присоединиться. Выберите процесс nunit-agent.exe. Если существует более одного процесса nunit-agent.exe, вы можете нажать Ctrl +, чтобы выбрать все из них. Возможно, вам придется проверитьShow processes in all sessions и / илиShow processes from all users чтобы получить файл nunit-agent.exe. На этом этапе вы сможете отладить свой тест.

Теперь вы можете установить точку останова при вызове конструктораCardTable, По мере продвижения по отладчику вы сможете определить ошибку ссылки на нулевой объект.

Альтернатива пошаговому коду - выбрать в меню.Debug->Exceptions... в появившемся диалоговом окне установите флажок рядом сCommon Language Runtime Exceptions, Это заставит отладчик останавливаться на любых исключениях, обработанных или необработанных, когда они будут выброшены. Это устраняет необходимость в точке останова, но если у вас есть генерируемые исключения, которые могут быть перехвачены, это может доставить больше хлопот, чем описанный выше метод точки останова.

@ peter9227 Да, экспресс-версии Visual Studio не могут быть прикреплены к процессу.
сочетание клавиш ctrl + alt + p ничего не тянуло вверх. Я использую экспресс-версию VS, это имеет значение? peter9464

Похожие вопросы