测试替身之类型
測(cè)試樁Stub
樁:截?cái)嗟幕蚍浅6痰奈矬w。
測(cè)試樁,用最簡(jiǎn)單的可能實(shí)現(xiàn)代替Real。
基本實(shí)現(xiàn):所有方法僅一行,返回默認(rèn)值。
偽造對(duì)象Fake
Fake是Real的簡(jiǎn)化版本,但是沒(méi)有副作用。
public interface UserRepository {void save(User user);User findById(long id);User findByUsername(String username); }public class FakeUserRepository implements UserRepository {private Collection<User> users = new ArrayList<User>();public void save(User user) {if(findById(user.getId()) == null) {users.add(user);}}public User findById(long id) {for(User user : users) {if(user.getId() == id) {return user;}}return null;}public User findByUsername(String username) {for(User user : users) {if(user.getUsername().equals(username)) {return user;}}return null;} }測(cè)試間諜Spy
Spy是一種測(cè)試替身,它用于記錄過(guò)去發(fā)生的情況,測(cè)試事后知道所發(fā)生的一切。
public class DLog {private final DLogTarget[] targets;public DLog(DLogTarget... targets) {this.targets = targets;}public void write(Level level, String message) {for(DLogTarget each : targets) {each.write(level, message);}} }public class DLogTest {@Testpublic void writesEachMessageToAllTargets() {SpyTarget spy1 = new SpyTarget();SpyTarget spy2 = new SpyTarget();DLog log = new DLog(spy1, spy2);log.write(Level.INFO, "Hello world.");assertTrue(spy1.received(Level.INFO, "Hello world."));assertTrue(spy2.received(Level.INFO, "Hello world."));} }// 使用SpyTarget跟蹤數(shù)據(jù) class SpyTarget implements DLogTarget {private List<String> log = new ArrayList<String>();public void write(Level level, String message) {log.add(concatenated(level, message));}public boolean received(Level level, String message) {return log.contains(concatenated(level, message));}private String concatenated(Level level, String message) {return level.getName() + ":" + message;} }模擬對(duì)象Mock
Mock是特殊的Spy。它是一個(gè)在特定情景下可配置行為的對(duì)象。
總結(jié)
- 上一篇: 数字签名,数字证书,证书链原理
- 下一篇: 接口隔离原则(ISP)