public void VirtualCard_Updates_Balance_In_ThreadSafe() { //arrange var pin = 1234; var balance = 100M; var vc = new VirtualCard(pin, balance); var taskList = new List <Task>(); //act taskList.Add(Task.Run(async() => { await Task.Delay(99); await vc.WithdrawMoney(pin, 20); })); taskList.Add(Task.Run(async() => { await Task.Delay(150); await vc.WithdrawMoney(pin, 10); })); taskList.Add(Task.Run(async() => { await Task.Delay(33); await vc.AddMoney(10); })); taskList.Add(Task.Run(async() => { await Task.Delay(77); await vc.AddMoney(10); })); Task.WaitAll(taskList.ToArray()); var result = vc.Balance; //assert Assert.AreEqual(90, result); }
public void VirtualCard_Can_TopBalance() { //arrange var balance = 100M; var topup_amt = 10M; var vc = new VirtualCard(0, balance); //act vc.AddMoney(topup_amt).Wait(new TimeSpan(0, 0, 0, 1)); var result = vc.Balance; //assert Assert.AreEqual(balance + topup_amt, result); }