Junit實現抽象類測試(二)

2021-06-06 06:46:31 字數 2438 閱讀 8573

引用:

如果抽象類中包含了具體實現的方法,那麼使用

抽象類測試(一)

中的抽象類測試方式就很勉強了,因為抽象類的具體方法有可能被繼承該抽象類的具體子類所覆蓋,導致測試偏差現象發生。對於這樣的測試場景,可以引入靜態內部類進行抽象類變相例項化測試,這裡引入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...