public void GetBalance() { var dictionary = new Dictionary <string, object>(); var service = new Mock <IBankLedgerService>(); service.SetupGet(x => x.DataBase).Returns(dictionary); var ledgerService = new LedgerService(service.Object); var account = new Account("testing", "password", "", null); var badAccount = new Account(null, "password", "", null); var depLedger = new Ledger(0, TransactionType.Deposit, 10); var withLedger = new Ledger(0, TransactionType.Withdrawl, 10); Assert.Throws <ArgumentException>(() => ledgerService.GetTotalBalance(null)); Assert.Throws <ArgumentException>(() => ledgerService.GetTotalBalance(badAccount)); Assert.AreEqual(0, ledgerService.GetTotalBalance(account)); ledgerService.CreateLedger(account, depLedger); ledgerService.CreateLedger(account, withLedger); ledgerService.CreateLedger(account, depLedger); ledgerService.CreateLedger(account, withLedger); ledgerService.CreateLedger(account, depLedger); ledgerService.CreateLedger(account, withLedger); Assert.AreEqual(0, ledgerService.GetTotalBalance(account)); ledgerService.CreateLedger(account, depLedger); Assert.AreEqual(10, ledgerService.GetTotalBalance(account)); ledgerService.CreateLedger(account, withLedger); ledgerService.CreateLedger(account, withLedger); Assert.AreEqual(-10, ledgerService.GetTotalBalance(account)); for (int i = 0; i < 11; i++) { ledgerService.CreateLedger(account, depLedger); } Assert.AreEqual(100, ledgerService.GetTotalBalance(account)); for (int i = 0; i < 11; i++) { ledgerService.CreateLedger(account, withLedger); } Assert.AreEqual(-10, ledgerService.GetTotalBalance(account)); }