我正在使用EasyMock.capture捕獲傳遞給函數的集合。但是這個集合是可變的。EasyMock捕獲可變參數(集合)
因此,如果稍後如果函數foo正在修改集合,它也會反映在EasyMock捕獲的值中。您是否強制EasyMock克隆集合來代替僅保留參考?
我正在使用EasyMock.capture捕獲傳遞給函數的集合。但是這個集合是可變的。EasyMock捕獲可變參數(集合)
因此,如果稍後如果函數foo正在修改集合,它也會反映在EasyMock捕獲的值中。您是否強制EasyMock克隆集合來代替僅保留參考?
現在沒有辦法像Easymock
那樣管理這樣的中間捕獲。
但是,您可以創建自己的捕獲類型以便於實現。
這裏的東西,讓你開始:
public class DefensiveCopyCapture<T> extends Capture<T> {
@Override
public void setValue(T value) {
// create a copy of your type here;
// if the type happens to be a Collection like in your case, use
// the copy constructors to create a copy
T copy = ...;
super.setValue(copy);
}
}
然後你就可以像下面創建捕獲和你想捕捉儘可能多的價值 - 捕獲的收藏價值將包含在不同的捕獲所有值的快照整個執行過程中的時間。
Capture<Type> capturer = new DefensiveCopyCapture<Type>();
您還可以使用getCurrentArguments和IAnswer檢索參數。
但是,擴展Capture對象也非常優雅。