Модульное тестирование NUnit, включающее dbcontext - PullRequest
0 голосов
/ 11 марта 2019

У меня есть код ниже, который теперь можно тестировать.Проблема в том, что когда он достигает кода, связанного с Entity Framework (EF), он там как бы зависает (бесконечный цикл).Я думаю, что мое временное решение - закомментировать мой код, связанный с EF.

Я понимаю, что для тестирования EF мне могут понадобиться такие вещи, как MOQ или интеграционное тестирование, которые я планирую выпустить позже.Между тем, как мне «разделить» весь этот код EF, чтобы я мог выполнять тестирование NUnit для другого тестируемого кода?Вот один из методов, которые у меня есть:

public void PlaceDeposit(BankAccount account, decimal _transaction_amt)
{   

    if (_transaction_amt <= 0)               
        _msgPrinter.PrintMessage("Amount needs to be more than zero. Try again.", false);
    else if (_transaction_amt % 10 != 0)
        _msgPrinter.PrintMessage($"Key in the deposit amount only with multiply of 10. Try again.", false);
    else if (!PreviewBankNotesCount(_transaction_amt))
        _msgPrinter.PrintMessage($"You have cancelled your action.", false);
    else
    {
        var transaction = new Transaction()
        {
            AccountID = account.Id,
            BankAccountNoTo = account.AccountNumber,
            TransactionType = TransactionType.Deposit,
            TransactionAmount = _transaction_amt,
            TransactionDate = DateTime.Now
        };
        repoTransaction.InsertTransaction(transaction);
        // Add transaction record - End

        account.Balance = account.Balance + _transaction_amt;

        ctx.SaveChanges();

        _msgPrinter.PrintMessage($"You have successfully deposited {Utility.FormatAmount(_transaction_amt)}", true);
    }
}

У меня есть этот метод тестирования в NUnit, который отлично работает:

[TestCase("Amount needs to be more than zero. Try again.",0)]
[TestCase("Amount needs to be more than zero. Try again.",-1)]
[TestCase("Key in the deposit amount only with multiply of 10. Try again.", 1)]
[TestCase("Key in the deposit amount only with multiply of 10. Try again.", 5)]
public void ShowErrorMessage_OnPlaceDeposit(string expectedMessage, decimal transactionAmount)
{
    // Arrange - Start
    var mock = new MockMessagePrinter();

    MeybankATM atmCustomer = new MeybankATM(new RepoBankAccount(), new RepoTransaction(), mock);

    BankAccount bankAccount = new BankAccount()
    {
        FullName = "John",
        AccountNumber = 333111,
        CardNumber = 123,
        PinCode = 111111,
        Balance = 2000.00m,
        isLocked = false
    };
    // Arrange - End

    // Act
    atmCustomer.PlaceDeposit(bankAccount, transactionAmount);

    // Assert                       
    Assert.AreEqual(expectedMessage, mock.Message);
}

Теперь все, что у меня осталось, это проверитьЧасть обновления баланса:

account.Balance = account.Balance + _transaction_amt;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...