把我對 Stack 類作出的所有修改和修復綜合起來,可以得到清單 28 中的代碼。
清單 28. 一個可正常工作的棧
import java.util.ArrayList;
public class Stack<E> {
private ArrayList<E> list;
public Stack() {
this.list = new ArrayList<E>();
}
public void push(E value) {
if(value == null){
throw new RuntimeException("Can't push null");
}else{
this.list.add(value);
}
}
public E pop() {
if(this.list.size() > 0){
return this.list.remove(this.list.size()-1);
}else{
throw new RuntimeException("Nothing to pop");
}
}
public E peek() {
if(this.list.size() > 0){
return this.list.get(this.list.size()-1);
}else{
return null;
}
}
}
在此,StackBehavior 類運行 7 種行為,以確保 Stack 類能按照 Linda 的(和我自己的一點)規范運行。Stack 類 還可能使用某種重構(也許 pop() 方法 應該調用 peek() 進行測試,而不是執行 size() 檢查?),但是由于一直使用了行為驅動過程,我可以很自信地對代碼作出更改。如果出現了問題,很快就可以收到通知。
結束語
您可能已經注意到,本月對行為驅動開發(BDD)的探索中,Linda 實際上就是客戶。在這里,可以把 Frank 看作開發人員。如果把這里的領域(即數據結構)換成其它領域(例如一個呼叫中心應用程序),以上應用仍然類似。作為客戶或領域專家的 Linda 指出系統、特性或應用程序應該 執行什么功能,像 Frank 這樣的開發人員則使用 BDD 確保正確理解了她的要求并實現這些需求。
文章來源于領測軟件測試網 http://www.kjueaiud.com/