引用:
如果抽象類中包含了具體實現的方法,那麼使用
抽象類測試(一)
中的抽象類測試方式就很勉強了,因為抽象類的具體方法有可能被繼承該抽象類的具體子類所覆蓋,導致測試偏差現象發生。對於這樣的測試場景,可以引入靜態內部類進行抽象類變相例項化測試,這裡引入commodity
抽象類實現這種設計,該類屬性,抽象方法和例項方法的具體描述如下:
commodity_name
屬於commodity
類例項私有屬性,用於記錄
commodity
類例項的
name值
commodity_price
屬於commodity
類例項私有屬性,用於記錄
commodity
類例項的
price值
getcommodity()
工廠方法,返回乙個
commodity例項
changername()
改變commodity
例項名稱
changerprice()
改變commodity
例項**
getcommodityname()
取得commodity
例項名稱
getcommodityprice()
取得commodity
例項**
setcommodityname()
設定commodity
例項名稱
setcommodityprice()
設定commodity
例項**
commodity
抽象類具體**如下:
packagecom.fastpoint;
publicabstract classcommodity
public voidchangerprice(doublenewprice)
publicstring getcommodity_name()
protected voidsetcommodity_name(string commodity_name)
public doublegetcommodity_price()
protected voidsetcommodity_price(doublecommodity_price) }
commodity
類是乙個抽象的商品類,本身包含了工廠方法
getcommodity()
來返回任何乙個繼承該類的具體子類例項,其餘
6個方法對映為該抽象商品類的具體業務操作。使用
junit
對commodity
類進行測試需要得到類的例項,但是該類屬於抽象類無法例項化,這樣就需要引入乙個具體子類來繼承
commodity
類,然後使用
junit
對他進行測試,
commoditytestcase
測試驅動類具體**入下:
package com.fastpoint;
import static org.junit.assert.*;
import org.junit.after;
import org.junit.before;
import org.junit.test;
public class commoditytest }
@before
public void setup() throws exception
@after
public void teardown() throws exception
@test
public void testchangername()
@test
public void testchangerprice()
@test
public void testgetcommodity_name()
@test
public void testgetcommodity_price() }
commoditytestcase
類內部宣告了乙個靜態類
inner_commodity
,該類繼承了
commodity
類來實現其類具體行為,
commoditytestcase
類也是inner_commodity
類的外圍類。這樣做的好處在於,每乙個類都有對應的
testcase
類,測試類層次清晰便於管理和回歸。
Junit實現抽象類測試(一)
引用 oop的乙個很好的機制是使用抽象類,抽象類是不能被例項化的,只能提供給派生類乙個介面。設計人員通常使用抽象類來強迫實現人員從基類派生,這樣可以確保新的類包含一些期待的功能。在 junit 對抽象類的測試中再次引入工廠設計模式,其測試思想是 抽象類不能被例項化,所以使用具體類測試抽象類是不可以的...
介面 抽象類 實現類
如上圖介面類list只具有方法,無法例項化,我們在使用時必須通過下面的實現類來使用list的方法。用乙個類 implements 介面,這樣這個類就可以使用介面中的方法了。2.不用implements,通過api文件下的另請參見 方法建立抽象類物件,2.1 比如介面connection connec...
二 抽象類與介面
1 介面是一種 引用資料型別 編譯之後也是乙個class位元組碼檔案。2 介面是完全抽象的。或者也可以說介面是特殊的抽象類。3 介面怎麼定義 修飾符列表 inte ce 介面名 4 介面支援多繼承。5 介面中只有常量 抽象方法。6 介面中所有的元素都是public修飾的 7 介面中抽象方法的publ...