-
Notifications
You must be signed in to change notification settings - Fork 0
/
UnitTest1.cs
103 lines (92 loc) · 5.29 KB
/
UnitTest1.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
using System;
using System.Collections.Generic;
using Moq;
using Xunit;
namespace DemoATM.Test
{
public class UnitTest1
{
private readonly ATMController sut ;
private readonly Mock<ILogFile> logMocking;
public UnitTest1()
{
var mock = new Moq.MockRepository(MockBehavior.Default);
logMocking = mock.Create<ILogFile>();
var dac = mock.Create<IAccountDAC>();
sut = new ATMController(logMocking.Object,dac.Object);
var accounts = new List<Account>()
{
new Account(){Username="john",Balance=500},
new Account(){Username="Doe",Balance=50},
};
dac.Setup(dac => dac.GetAllAccounts())
.Returns(accounts);
// this.sut = sut;
}
[Theory(DisplayName = "ผู้ใช้กดเงินออกจากตู้ ถูกต้อง ระบบทำการหักเงินออก")]
[InlineData("john",500,0)]
[InlineData("john",450,50)]
[InlineData("john",1,499)]
public void WithdrawWithAllDataCorrectSystemAcceptTheRest(string username,double withdrawAmount,double expectedMoney)
{
var actual = sut.Withdraw(username,withdrawAmount);
Assert.True(actual);
var selectedAccount = sut.GetAccountByUsername(username);
Assert.Equal(expectedMoney, selectedAccount.Balance);
logMocking.Verify(log => log.WriteWithdraw(
It.Is<string>(it => it == username),
It.Is<double>(it => it == withdrawAmount)));
}
[Theory(DisplayName = "ผู้ใช้กดเงินออกจากตู้ไม่ถูกต้อง ระบบทำการแจ้งเตือน")]
[InlineData("john", 0, 500)]
[InlineData("john", -1, 500)]
public void WithdrawWithSomeDataIncorrectThenSystemMustNotAcceptTheRest(string username, double withdrawAmount, double expectedMoney)
{
var actual = sut.Withdraw(username, withdrawAmount);
Assert.False(actual);
var selectedAccount = sut.GetAccountByUsername(username);
Assert.Equal(expectedMoney, selectedAccount.Balance);
logMocking.Verify(log => log.WriteWithdraw(
It.IsAny<string>(),
It.IsAny<double>()),
Times.Never());
}
[Theory(DisplayName = "ผู้ใช้กดเงินออกจากตู้ไม่ถูกต้อง ระบบทำการแจ้งเตือน")]
[InlineData("Unknow", 100)]
[InlineData(null, 100)]
[InlineData("", 100)]
public void InvalidUserTryToWithdrawThenSystemMustNotAcceptTheResult(string username, double withdrawAmount)
{
var actual = sut.Withdraw(username, withdrawAmount);
Assert.False(actual);
var selectedAccount = sut.GetAccountByUsername(username);
Assert.Null(selectedAccount);
logMocking.Verify(log => log.WriteWithdraw(
It.IsAny<string>(),
It.IsAny<double>()),
Times.Never());
}
[Theory(DisplayName = "ผู้ใช้กดเงินออกจากระบบเงินในบัญชีไม่พอ ระบบทำการแจ้งเตือน")]
[InlineData("Doe",100,50)]
public void WithdrawWhenBalanceIsNotEnoughtThenSystemMustNotAcceptTheResult(string username, double withdrawAmount, double expectedMoney)
{
var actual = sut.Withdraw(username, withdrawAmount);
Assert.False(actual);
var selectedAccount = sut.GetAccountByUsername(username);
Assert.Equal(expectedMoney,selectedAccount.Balance);
logMocking.Verify(log => log.WriteWithdraw(
It.IsAny<string>(),
It.IsAny<double>()),
Times.Never());
}
}
}
//Normal cases
//1.ผู้ใช้กดเงินออกจากตู้ ถูกต้อง ระบบทำการหักเงินออก
//2.ผู้ใช้กดเงินออกจากระบบเงินในบัญชีไม่พอ ระบบทำการแจ้งเตือน
//3.ผู้ใช้กดเงินออกจากตู้ถูกต้อง แต่ตู้มีเงินไม่พอ ระบบทำการแจ้งเตือน
//Alternative Cases
//4.ผู้ใช้บัญชีพิเศษกดเงินมากกว่าที่มีในบัญชี ระบบบันทึกเครดิตแล้วนำเงินออกมา
//5.ผู้ใช้บัญชีพิเศษกดเงินมากกว่าที่มีในบัญชี แต่เครดิตเต็มแล้ว ระบบทำการแจ้งเตือน
//Exception Cases
//6.ผู้ใช้กดเงินสำเร็จแต่ระบบไม่สามารถหักเงินในบัญชีได้ ระบบทำการแจ้งเตือน