C# Затуп с UnitTest

делаю практическую работу на C# (пользуюсь им первый раз в жизни и именно поэтому прошу помощи тут) с помощью "методички" от колледжа, появилась проблема, делаю все так же как в "методичке", но тест не проходит, почему - не знаю, помогите пожалуйста.

По методичке допущена ошибка, которую необходимо исправить, но даже после ее исправления тест не проходит

(На скринах ошибка уже исправлена)

Test_img1

 Debit_WithValidAmount_UpdatesBalance
   Источник: BankAccountTests.cs строка 11
   Длительность: 127 мс

  Сообщение: 
Сбой Assert.AreEqual. Между ожидаемым значением <7,44> и фактическим значением <11,99> требуется разница не более чем <0,001>. Account not debited correctly

  Трассировка стека: 
BankAccountTests.Debit_WithValidAmount_UpdatesBalance() строка 18

Test_img2

Microsoft.VisualStudio.TestTools.UnitTesting.AssertFailedException: "Сбой Assert.AreEqual. Между ожидаемым значением <7,44> и фактическим значением <11,99> требуется разница не более чем <0,001>. Account not debited correctly"

Задание:(Ниже все из "методички", текст может быть кривой т.к она в PDF формате)

1. Создать новый проект BankAccountNS для тестирования в Библиотеки классов.

Код проекта:

using System;
namespace BankAccountNS
{ public class BankAccount
{ private readonly string m_customerName; private double m_balance;
private BankAccount() { }
public BankAccount(string customerName, double balance)
{ m_customerName = customerName; m_balance = balance;}
public string CustomerName
{get { return m_customerName; }} public double Balance
{get { return m_balance; }} public void Debit(double amount)
{if (amount > m_balance)
{throw new ArgumentOutOfRangeException("amount");} if (amount < 0)
{throw new ArgumentOutOfRangeException("amount");} m_balance += amount; //
intentionally incorrect code} public void Credit(double amount)
{if (amount < 0)
{throw new ArgumentOutOfRangeException("amount");} m_balance += amount;}
public static void Main()
{BankAccount ba = new BankAccount("Mr. Bryan Walton", 11.99); ba.Credit(5.77);
ba.Debit(11.22);
Console.WriteLine("Current balance is ${0}", ba.Balance

Провести тестирование на примере метода Debit. Метод Debit вызывается, когда денежные средства снимаются со счета. Определение метода Debit имеет вид:

public void Debit(double amount)
{ if(amount > m_balance) { throw new ArgumentOutOfRangeException(«amount»); } if
(amount < 0) { throw new ArgumentOutOfRangeException(«amount»); } m_balance +=
amount; }

2 Создать новый проект BankAccountNS для тестирования в Библиотеки классов. Код проекта:

1 Создать тест, который проверяет, снимается ли со счета нужная сумма при допустимом размере кредита (со значением меньшим, чем баланс счета, и большим, чем ноль). Добавьте следующий метод в этот класс BankAccountTests :

[TestMethod]
public void Debit_WithValidAmount_UpdatesBalance()
{
// Arrange
double beginningBalance = 11.99; double debitAmount = 4.55; double expected = 7.44;
BankAccount account = new BankAccount(«Mr. Bryan Walton», beginningBalance);
// Act account.Debit(debitAmount);
// Assert
double actual = account.Balance; Assert.AreEqual(expected, actual, 0.001, «Account not
debited correctly»);
}

Исправление ошибки по методичке

Результат теста содержит сообщение, описывающее возникшую ошибку. Для метода AreEqual сообщение отражает ожидаемый результат (параметр Ожидается) и фактически полученный (параметр Фактическое). Ожидалось, что баланс уменьшится, а вместо этого он увеличился на сумму списания. Модульный тест обнаружил ошибку: сумма списания добавляется на баланс счета, вместо того чтобы вычитаться.

Исправление ошибки. Для исправления ошибки замените строку:

m_balance+= amount; 

на:

m_balance -= amount; (у меня все так же)

Мой код:

Обозреватель решений:

Solution_Explorer

BankAccount.cs:

using System;

namespace BankAccountNS
{
    public class BankAccount
    {
        private readonly string m_customerName; private double m_balance;
        private BankAccount() { }
        public BankAccount(string customerName, double balance)
        { m_customerName = customerName; m_balance = balance; }
        public string CustomerName
        { get { return m_customerName; } }
        public double Balance
        { get { return m_balance; } }

        public void Debit(double amount)
        {
            if (amount > m_balance)
            {
                throw new ArgumentOutOfRangeException("amount");
            }
            if (amount < 0)
            {
                throw new ArgumentOutOfRangeException("amount");
            }
            m_balance -= amount; 
        }

        public void Credit(double amount)
        {
            if (amount < 0)
            { throw new ArgumentOutOfRangeException("amount"); }
            m_balance += amount;
        }
        public static void Main()
        {
            BankAccount ba = new BankAccount("Mr. Bryan Walton", 11.99); ba.Credit(5.77);
            ba.Debit(11.22);
            Console.WriteLine("Current balance is ${0}", ba.Balance);
        }
    }
}

BankAccountTests.cs:

using BankAccountNS;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Security.Principal;

namespace BankTests
{
    [TestClass]
    public class BankAccountTests
    {
        [TestMethod]
        public void Debit_WithValidAmount_UpdatesBalance()
        {
            // Arrange
            double beginningBalance = 11.99; double debitAmount = 4.55; double expected = 7.44;
            BankAccount account = new BankAccount("Mr.Bryan Walton", beginningBalance);
            // Act account.Debit(debitAmount);
            // Assert
            double actual = account.Balance; Assert.AreEqual(expected, actual, 0.001, "Account not debited correctly");

        }
    }
}

Я пользуюсь этим языком первый раз и можно сказать, что ничего не понимаю, но проект нужно сдать как можно быстрее. Помогите мне пожалуйста, спасибо.


Ответы (1 шт):

Автор решения: 你的噩梦

Решение от @EvgeniyZ

Заменить // Act account.Debit(debitAmount); на account.Debit(debitAmount);

using BankAccountNS;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Security.Principal;

namespace BankTests
{
    [TestClass]
    public class BankAccountTests
    {
        [TestMethod]
        public void Debit_WithValidAmount_UpdatesBalance()
        {
            // Arrange
            double beginningBalance = 11.99; double debitAmount = 4.55; double expected = 7.44;
            BankAccount account = new BankAccount("Mr.Bryan Walton", beginningBalance);
            account.Debit(debitAmount); // Из за кривого PDF формата было не понятно что тут должно быть именно так
            // Assert
            double actual = account.Balance; Assert.AreEqual(expected, actual, 0.001, "Account not debited correctly");

        }
    }
}
→ Ссылка