簡體   English   中英

如何測試抽象類的方法?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM