如何正確的使用Mock[2] 軟件測試
public void requreInsurance(Insurances insurances) {
people.requreInsurance(insurances);
}
public clas People {
public void requreInsurance(Insurances insurances) {
job.requreInsurance(insurances);
}
}
public class Job {
public void requreInsurance(Insurances insurances) {
insurances.add(new HealthInsurance());
insurances.add(new RetirementInsurance());
insurances.add(new HouseFund());
insurances.add(new UnemploymentInsurance());
}
}
public class NullJob {
public void requreInsurance(Insurances insurances) {
insurances.add(new RetirementInsurance());
}
}
在第一個例子中我們需要進行兩個假設(Null 和 Not Null),而第二個例子,我們只需要一種假設
第一個例子中稀松平常的代碼違反了基本的面向對象的原則“封裝”,簡而言之是tell do not ask!!原則,因為違反了這個原則,我們不得不做出很多假設,減少假設的一個有效途徑就是減少return,tell你的對象替你效勞,如果你對寫不出健壯的mock測試煩惱,不妨看看是否寫出了符合面向對象原則的產品代碼,
正確使用Mock的原則就是盡量不用,改善設計才是王道,代碼難于使用通常的方法進行測試而不得不使用mock,絕對是一種smell,不要使用mock來掩蓋這種味道。
文章來源于領測軟件測試網 http://www.k11sc111.com/