Тест подразделения для класса банка в C # -- c# пол Связанный проблема

Unit Test for Bank class in C#


0
vote

проблема

русский

Я учусь создавать модульные тесты для проекта, написанного в C #. Я был следовать примеру на веб-сайте MSDN, и теперь я только что застрял на том, как создать тест на единицу, когда сумма меньше нуля. Удачный тест должен быть неудачным, когда я запускаю его. Однако, что я написал ниже, это прошло :( Будет кто-то, пожалуйста, дайте мне знать, что мне нужно сделать, чтобы исправить это? Спасибо

Вот то, что у меня до сих пор:

 <код>         // unit test method         [TestMethod]         [ExpectedException(typeof(ArgumentOutOfRangeException))]         public void Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange()         {             // arrange             double beginningBalance = 11.99;             double debitAmount = -100.00;               BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance);              // act             account.Debit(debitAmount);              // Not sure about this one             // on my main program, I use if...else to handle             // the situation when amount > balance by throwing the exception             double actual = account.Balance;             Assert.IsTrue(actual < 0, "Actual balance is greater than 0");                     }   

Это метод, который я проверяю на

 <код>         public void Debit(double amount)         {             if (m_frozen)             {                 throw new Exception("Account frozen");             }              if (amount > m_balance)             {                 throw new ArgumentOutOfRangeException("amount");             }              if (amount < 0)             {                 throw new ArgumentOutOfRangeException("amount");             }              m_balance -= amount;         }   
Английский оригинал

I'm learning to create unit tests for project written in C#. I've been follow the example on the MSDN website and now I just got stuck at how create a unit test when the amount is less than zero. The unit test is supposed to be failed when I run it. However, the way that I've written below, it passed :( Would someone please let me know what I need to do to fix it ? Thanks

Here is what I have so far:

        // unit test method         [TestMethod]         [ExpectedException(typeof(ArgumentOutOfRangeException))]         public void Debit_WhenAmountIsLessThanZero_ShouldThrowArgumentOutOfRange()         {             // arrange             double beginningBalance = 11.99;             double debitAmount = -100.00;               BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance);              // act             account.Debit(debitAmount);              // Not sure about this one             // on my main program, I use if...else to handle             // the situation when amount > balance by throwing the exception             double actual = account.Balance;             Assert.IsTrue(actual < 0, "Actual balance is greater than 0");                     } 

This is the method that I'm testing on

        public void Debit(double amount)         {             if (m_frozen)             {                 throw new Exception("Account frozen");             }              if (amount > m_balance)             {                 throw new ArgumentOutOfRangeException("amount");             }              if (amount < 0)             {                 throw new ArgumentOutOfRangeException("amount");             }              m_balance -= amount;         } 
</div
  
       
       

Список ответов

2
 
vote
vote
Лучший ответ
 

Тест выглядит просто хорошо, вы ожидаете исключения, когда сумма негативна, и он бросает исключение, в противном случае он не пройдет. Хотя в этом виде тестов у меня обычно есть что-то вроде этого в конце.

 <код> Assert.Fail("Should have thrown exception because of ........")   

Что <код> Assert не пройдет тест в случае, если исключение не брошено, когда ожидается.

 

The test looks just fine, you expect an exception when amount is negative and it's throwing exception, otherwise it won't pass. Although in this kind of tests, I usually have something like this at the end.

Assert.Fail("Should have thrown exception because of ........") 

That Assert will fail the test in case the exception is not thrown when expected.

</div
 
 
 
 
1
 
vote

Вы можете сделать это:

 <код> Assert.AreEqual( beginningBalance - debitAmount, account.Balance );   

Для проверки значения - то, что вы ожидаете, а не чуть менее ноль.

 

you could do this:

Assert.AreEqual( beginningBalance - debitAmount, account.Balance ); 

to verify the value is what you expect, instead of just less than zero.

</div
 
 
1
 
vote

как личные предпочтения, мне нравится, когда все мои тесты успешны :) Так что я бы написал что-то подобное:

 <код> var exception = Assert.Throws<ArgumentOutOfRangeException>(() => account.Debit(debitAmount)); Assert.That(exception.ParamName, Is.Equal("amount"));   

И, возможно, бросить различные типы исключений и сообщение для них.

 

As a personal preference, I like when all my tests are successful :) So I would write something like this:

var exception = Assert.Throws<ArgumentOutOfRangeException>(() => account.Debit(debitAmount)); Assert.That(exception.ParamName, Is.Equal("amount")); 

And, possibly, throw different types of exceptions and message for them.

</div
 
 

Связанный проблема

5  Сделать структуру сущности быть нечувствительными к регистру  ( Make entity framework be case insensitive ) 
Возможно ли установить корпус строки структуры объекта нечувствителен по умолчанию? Если я использую <код> string.StartsWith("stringToCompare", StringComp...

1  Узор сопоставления Regex внутри шаблона упаковки  ( Regex match pattern inside a wrapping pattern ) 
Я хочу сопоставить все номера телефонов, которые обернуты между & lt; и & gt; & gt; Теги. Это регулярное выражение для телефонов: <код> 0[2349]{1}-[1-9]{1}...

0  1002 Ошибка API Вызов PayPal Sandbox  ( 1002 error api call paypal sandbox ) 
Я создал учетную запись PayPal Sandbox, и создал пользователь, и у меня есть все учетные данные, осмотр этого правильных учетных данных, которые он несколько ...

1  Включить первый случай исключений для определенного куска кода  ( Enable first chance exceptions for specific piece of code ) 
Мне нужна Visual Studio, чтобы бросить первые шансы исключения только для определенного класса. Если я включаю первый случай исключения в Visual Studio, он ...

1  Есть ли способ генерировать GUID из списка руководств?  ( Is there a way to generate a guid from a list of guids ) 
У меня есть список объектов, которые они имеют GUID для IDS. Я хочу использовать идентификаторы в этом списке объектов для создания GUID, который я могу испол...

4  Трудно запустить параллельные вставки на SQLite базу данных в C #  ( Difficulty running concurrent inserts on sqlite database in c sharp ) 
Я запускаю ряд потоков, которые каждая попытка выполнить вставки в одну базу данных SQLite. Каждый поток создает собственную связь с БД. Каждый из них создает...

3  Представление строки в C #  ( String representation in c sharp ) 
IM TRING, чтобы взять на себя текст из существующей веб-страницы, используя этот метод: <код> try { WebClient client = new WebClient(...

-1  Право оправдании десятичного массива в C #?  ( Right justifying decimal array in c ) 
У меня есть проект для моего класса программирования C #; Написание программы, которая может прочитать файл работника и файл продаж и обрабатывать два. Я зако...

0  C # Обработка исключений на класс  ( C sharp class wide exception handling ) 
Можно ли удалить исключения в одном месте в файле класса C #? Я кодирую некоторые модульные тесты в NUNIT для проверки веб-службы WCF, и на всех методах / т...

0  NU1701, NU1202 Восстановление пакета Восстановление на свежей установке Windows / VS  ( Nu1701 nu1202 package restore errors on fresh windows vs setup ) 
Работа в команде, у нас есть решение в Git, который разрабатывается на 3 разных DEV. Я временно ушел на разное место с моим ноутбуком, где у меня свежая Win 1...

0  Wpf keypreview windows ключ и второй ключ  ( Wpf keypreview windows key and second key ) 
Я реализую приложение WPF в C # 4.5 для Windows 7, и я хотел бы иметь возможность схватить событие, когда пользователь нажимает клавишу Windows и C. Я реали...

0  Запустить функцию JavaScript с использованием C #  ( Trigger javascript function using c sharp ) 
Я должен написать класс C #, который получает содержимое HTML-страницы (страница публичная) и запускает функцию JavaScript, которая загружает файл. Моя цель...

0  Событие ListBox после сканирования штрих-кода  ( Listbox event after barcode scanning ) 
Я использую ListBox в окне приложение, мой список имеет некоторое количество штрих-кодов. Я хочу отсканировать их с помощью Reader barcode, а затем хочу пер...

1  Mongodb C # LINQ сгерированный запрос  ( Mongodb c sharp linq generated query ) 
Как я могу получить сгенерированный запрос из запроса LINQ? Я попробовал это, но это не работало: <код> var query = ( from d in mcollection.AsQu...

5  Лучшие практики для сканирования всех классов и методов для пользовательского атрибута  ( Best practices to scan all classes and methods for custom attribute ) 
Впервые я действительно должен был сделать сканирование сборки вручную. Я столкнулся с C # - Как перечислять все классы с атрибутом пользовательского класса?...

Связанный проблема

5  Сделать структуру сущности быть нечувствительными к регистру 
1  Узор сопоставления Regex внутри шаблона упаковки 
0  1002 Ошибка API Вызов PayPal Sandbox 
1  Включить первый случай исключений для определенного куска кода 
1  Есть ли способ генерировать GUID из списка руководств? 
4  Трудно запустить параллельные вставки на SQLite базу данных в C # 
3  Представление строки в C # 
-1  Право оправдании десятичного массива в C #? 
0  C # Обработка исключений на класс 
0  NU1701, NU1202 Восстановление пакета Восстановление на свежей установке Windows / VS 
0  Wpf keypreview windows ключ и второй ключ 
0  Запустить функцию JavaScript с использованием C # 
0  Событие ListBox после сканирования штрих-кода 
1  Mongodb C # LINQ сгерированный запрос 
5  Лучшие практики для сканирования всех классов и методов для пользовательского атрибута 



© 2021 www.qaru.top All Rights Reserved. Q&A House все права защищены


Licensed under cc by-sa 3.0 with attribution required.