轻拔琴弦|测试工程师成神之路丨Java单元测试——Mock技术(代码)
1.源代码
AccountService.java
package com.account;
import com.account.Account;
import com.account.AccountManager;
public class AccountService
{
//使用的账户管理器实现
private AccountManager accountManager;
//设置账户管理器实现的设置方法
public void setAccountManager( AccountManager manager )
{
this.accountManager = manager;
}
//一个设置客户经理实现从账户到账户的senderId beneficiaryId setter方法 。
//senderId:转出方Id
//beneficiaryId:收益方Id
//amount:金额
public void transfer( String senderId, String beneficiaryId, long amount )
{
//初始化转出方与收益方 , findAccountForUser为接口类方法
Account sender = this.accountManager.findAccountForUser( senderId );
Account beneficiary = this.accountManager.findAccountForUser( beneficiaryId );
//转入和收益
sender.debit( amount );
beneficiary.credit( amount );
//更新 , updateAccount为接口类方法
this.accountManager.updateAccount( sender );
this.accountManager.updateAccount( beneficiary );
}
}
Account.java
package com.account;
public class Account
{
private String accountId;
private long balance;
public Account(String accountId, long initialBalance)
{
this.accountId = accountId;
this.balance = initialBalance;
}
//借记
public void debit( long amount )
{
this.balance -= amount;
}
//信用
public void credit( long amount )
{
this.balance += amount;
}
public long getBalance()
{
return this.balance;
}
}
AccountManager.java
package com.account;
import com.account.Account;
public interface AccountManager
{
Account findAccountForUser(String userId );
void updateAccount(Account account );
}
由于在这里AccountManager.java仅仅做了一个interface , 我们主要Mock的是这个类 。 这几个类的类关系图如下:
通常的调用方法如下:
@Test
public void testTransferOK() {
Account sendAccount = new Account("1",200);
Account beneficiaryAccount = new Account("2",100);
AccountManager. updateAccount( senderAccount );
AccountManager.updateAccount( beneficiaryAccount );
AccountManager.findAccountForUser("1" )
AccountManager.findAccountForUser( "2" )
AccountService accountService = new AccountService();
accountService.setAccountManager(AccountManager);
accountService.transfer("1","2",50); //转钱
Assertions.assertEquals(150,sendAccount.getBalance());
Assertions.assertEquals(150,beneficiaryAccount.getBalance());
}
2.最通用的Mock技术StubAccountManager.java
package com.account;
import java.util.HashMap;
public class StubAccountManager implements AccountManager{
- 绝地求生|期待一年半的宝藏手游终于测试!开放世界真实场景,刷新生存新高度
- 航天君|在叙利亚完成第二阶段测试,到底何时才能实用?,苏57已赴战场
- 埃塞俄比亚|埃塞将与中国合作生产新冠病毒检测试剂盒
- 央视新闻客户端|埃塞将与中国合作生产新冠病毒检测试剂盒
- 中国新闻网|沈阳自动化所牵头制定“WIA-FA”一致性测试国家标准获批
- 中国成功发射“可重复使用航天器”,外界猜测“可能已成功测试‘神龙’空天飞机”
- 环球网|中国成功发射“可重复使用航天器”,外界猜测“可能已成功测试‘神龙’空天飞机”
- 武汉加码自动驾驶 新增开放测试路段
- 「可重复使用航天器」中国成功发射“可重复使用航天器”,外界猜测“可能已成功测试‘神龙’空天飞机”
- 天涯明月刀手游|终极测试必玩内容!被万千少侠誉为“天刀瑰宝”的她终于来啦!