У меня есть код ниже, который теперь можно тестировать.Проблема в том, что когда он достигает кода, связанного с 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;