mock对象测试

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框架。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值