这是针对基于timezone的程序的例子写的单元测试,里面用到了mock
public class SFDatetimeEnricher implements SFEnricher {
final private DateService dateService;
public SFDatetimeEnricher (DateService dateService) {
this .dateService = dateService;
}
@Override
public void enrich (AllocationSnapshotEvent allocationSnapshotEvent, AllocationLegSnapshot allocationLegSnapshot, SFTradeEvent targetTradeEvent) {
setTGPublishTime(targetTradeEvent);
setTradeDate(targetTradeEvent);
setTransactionTime(targetTradeEvent);
setEnteredTime(targetTradeEvent);
setFinancialDate(targetTradeEvent);
}
private void setEnteredTime (SFTradeEvent targetTradeEvent) {
targetTradeEvent.setEnteredTime(dateService.now());
}
private void setTransactionTime (SFTradeEvent targetTradeEvent) {
targetTradeEvent.setTransactionTime(dateService.now());
}
private void setTradeDate (SFTradeEvent targetTradeEvent) {
((TradeEventContainer)targetTradeEvent).putHeaderField(TradeHeaderKey.TradeDate,dateService.today(targetTradeEvent.getPOGroup()));
}
public void setTGPublishTime (SFTradeEvent targetTradeEvent) {
targetTradeEvent.setTGPublishTime(dateService.now());
}
public void setFinancialDate (SFTradeEvent targetTradeEvent) {
for (SFTradeLeg leg : targetTradeEvent.getLegs()) {
((TradeLeg)leg).putField(TradeLegKey.FinancialDate,(dateService.getFinancialDate(targetTradeEvent.getPOGroup())));
}
}
}
public class JodaDateService implements DateService {
private Map<String, String> timeZoneMapping = ImmutableMap.of("LOH" , "Europe/London" , "HKH" , "Asia/Hong_Kong" , "NYH" , "America/New_York" );
private Map<String, String> cutTimeMapping = ImmutableMap.of("LOH" , "23:59" ,