package mock;
public class Account {
private String accountId;
private long balance;
public Account(String accountId, long initialBalance) {
this.accountId = accountId;
this.balance = initialBalance;
}
public String getAccountId() {
return accountId;
}
public void setAccountId(String accountId) {
this.accountId = accountId;
}
public void setBalance(long balance) {
this.balance = balance;
}
public void debit(long amount) {
this.balance -= amount;
}
public void credit(long amount) {
this.balance += amount;
}
public long getBalance() {
return this.balance;
}
}
package mock;
public interface AccountManager {
public Account findAccountForUser(String userId);
public void updateAccount(Account account);
}
package mock;
public class AccountService {
private AccountManager accountManager;
public void setAccountManager(AccountManager manager) {
this.accountManager = manager;
}
public void transfer(String senderId, String beneficiaryId, long amount) {
Account sender = this.accountManager.findAccountForUser(senderId);
Account beneficiary = this.accountManager
.findAccountForUser(beneficiaryId);
sender.debit(amount);
beneficiary.credit(amount);
this.accountManager.updateAccount(sender);
this.accountManager.updateAccount(beneficiary);
}
}
为了而是transfer,所以必须要有一个数据访问层对象,而我们还没完成这个类的编写,这个时候就mock一个数据访问层对象。
package mock;
import java.util.HashMap;
import java.util.Map;
public class MockAccountManager implements AccountManager {
private Map<String, Account> accounts = new HashMap<String, Account>();
public void addAccount(String userId, Account account) {
this.accounts.put(userId, account);
}
public Account findAccountForUser(String userId) {
return this.accounts.get(userId);
}
public void updateAccount(Account account) {
}
}
package mock;
import org.junit.Assert;
import org.junit.Test;
public class TestAccountService {
@Test
public void testTransferOk() {
MockAccountManager mockAccountManager = new MockAccountManager();
Account senderAccount = new Account("1", 200);
Account beneficiaryAccount = new Account("2", 100);
mockAccountManager.addAccount("1", senderAccount);
mockAccountManager.addAccount("2", beneficiaryAccount);
AccountService accountService = new AccountService();
accountService.setAccountManager(mockAccountManager);
accountService.transfer("1", "2", 50);
Assert.assertEquals(150, senderAccount.getBalance());
Assert.assertEquals(150, beneficiaryAccount.getBalance());
}
}
//当然这里更好的做法是mock的数据从外部文件或者xml等读入。
EasyMock是一个mock框架。
public class Account {
private String accountId;
private long balance;
public Account(String accountId, long initialBalance) {
this.accountId = accountId;
this.balance = initialBalance;
}
public String getAccountId() {
return accountId;
}
public void setAccountId(String accountId) {
this.accountId = accountId;
}
public void setBalance(long balance) {
this.balance = balance;
}
public void debit(long amount) {
this.balance -= amount;
}
public void credit(long amount) {
this.balance += amount;
}
public long getBalance() {
return this.balance;
}
}
package mock;
public interface AccountManager {
public Account findAccountForUser(String userId);
public void updateAccount(Account account);
}
package mock;
public class AccountService {
private AccountManager accountManager;
public void setAccountManager(AccountManager manager) {
this.accountManager = manager;
}
public void transfer(String senderId, String beneficiaryId, long amount) {
Account sender = this.accountManager.findAccountForUser(senderId);
Account beneficiary = this.accountManager
.findAccountForUser(beneficiaryId);
sender.debit(amount);
beneficiary.credit(amount);
this.accountManager.updateAccount(sender);
this.accountManager.updateAccount(beneficiary);
}
}
为了而是transfer,所以必须要有一个数据访问层对象,而我们还没完成这个类的编写,这个时候就mock一个数据访问层对象。
package mock;
import java.util.HashMap;
import java.util.Map;
public class MockAccountManager implements AccountManager {
private Map<String, Account> accounts = new HashMap<String, Account>();
public void addAccount(String userId, Account account) {
this.accounts.put(userId, account);
}
public Account findAccountForUser(String userId) {
return this.accounts.get(userId);
}
public void updateAccount(Account account) {
}
}
package mock;
import org.junit.Assert;
import org.junit.Test;
public class TestAccountService {
@Test
public void testTransferOk() {
MockAccountManager mockAccountManager = new MockAccountManager();
Account senderAccount = new Account("1", 200);
Account beneficiaryAccount = new Account("2", 100);
mockAccountManager.addAccount("1", senderAccount);
mockAccountManager.addAccount("2", beneficiaryAccount);
AccountService accountService = new AccountService();
accountService.setAccountManager(mockAccountManager);
accountService.transfer("1", "2", 50);
Assert.assertEquals(150, senderAccount.getBalance());
Assert.assertEquals(150, beneficiaryAccount.getBalance());
}
}
//当然这里更好的做法是mock的数据从外部文件或者xml等读入。
EasyMock是一个mock框架。