[英]Testing class with ArrayList private member
我有一個具有以下實現的Java類:
class Some {
private ArrayList<SomeObject> list = new...
public void addToList(Long t) {
SomeObject so = new SomeObject(new Date, t)
list.add(so)
}
private float fun1(ArrayList<SomeObject> x) {
//some operations on list "list",
//res - result of float calculations based on list "x"
return res
}
public float publicFun() {
//some other operations on private list "list"
return fun1(list);
}
問題是如何使用Mockito,PowerMock或其他測試工具來測試功能publicFun()
? 要運行此公共功能,我必須模擬私有列表,但是我該怎么辦呢?
在此示例中,由於不受歡迎的依賴關系而導致一些問題:
1個new Date()
要解決它,我建議引入新的界面
interface CurrentTimeProvider {
Date getCurrentDate();
}
實施是顯而易見的(為簡單起見,我跳過了它)
2 Is new ArrayList()
結果我們得到這樣的東西:
class Some {
private CurrentTimeProvider timeProvider;
private ArrayList<SomeObject> list = new ArrayList<SomeObject>();
public void setTimeProvider(CurrentTimeProvider timeProvider) {
this.timeProvider = timeProvider;
}
public void addToList(Long t) {
SomeObject so = new SomeObject(timeProvider.getCurrentDate(), t)
list.add(so)
}
public float publicFun() {
//some other operations on private list "list"
return fun1(list);
}
並測試一下:
CurrentTimeProvider timeProvider = mock(CurrentTimeProvider.class);
Some some = new Some();
some.setTimeProvider(timeProvider);
when(timeProvider.getCurrentDate).thenReturn(mock(Date.class));
//Invoke you method
some.publicFun();
//Put assert and verify here
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.