[英]How to test the abstract class methods?
如何測試抽象類? 我研究了它,發現需要創建一個模擬對象,但是如何創建一個模擬對象呢? 我不知道,有人可以幫忙嗎? 例如,這是我的抽象類:
public abstract class Aging {
private int age;
public Aging(int age) {
setAge(age);
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
我試圖使用以下代碼來測試構造函數:
@Test
public void testAgingConstructor() {
Aging a = new Aging(18);
a.setAge(19);
Aging b = new Aging(19);
assertEquals(b, a);
}
我收到一條錯誤消息“老化是抽象的;無法實例化” 。 我該怎么辦?
為了實例化您的抽象類,您需要創建一個具體的子類。
@Test
public void testAgingConstructor() {
class AgingSubclass extends Aging {
public AgingSubclass(int age) { super(age); }
}
Aging a = new AgingSubclass(18);
a.setAge(19);
Aging b = new AgingSubclass(19);
assertEquals(b, a);
}
我將創建一個新的非抽象類來擴展您的抽象類。它將是一個空類,除了帶有extends子句的標頭。 然后,您將可以測試在抽象類上實現的方法。
要問自己的問題是:
為什么我需要測試這堂課?
它是一類專門由其他模塊擴展的類嗎? 然后是的,您應該通過實際測試該用例進行測試:擴展您的抽象類,並驗證所獲得的行為是否符合預期。
這是將在您有一些實現的模塊中使用的類嗎? 然后,您很可能應該測試這些實現的行為,從而測試具體的類。
總而言之,您最終要測試的是一些擴展抽象類的具體類。
模擬允許您在測試類時不關心類的依賴關系,並且與您的問題無關。
如果不想麻煩編寫具體的類,可以使用一個不錯的技巧,就是利用匿名類:
@Test
public void testAgingConstructor() {
Aging a = new Aging(18){}; //Create anonymous subclass and instantiate it.
a.setAge(19);
Aging b = new Aging(19){};
assertEquals(b, a);
}
對於您的班級,應如下所示。 它顯示了如何內聯實現抽象類(花括號)。 如果抽象類中有抽象方法,則必須在大括號中覆蓋並實現它們。
@Test
public void testAgingConstructor(){
Aging a =new Aging(18) {};
a.setAge(19);
Aging b =new Aging(19) {};
assertEquals(b,a);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.