簡體   English   中英

模擬調用超級方法-受保護

[英]Mock call super method - protected

我的問題是我想用超級調用方法來模擬B類,因為我不需要在那里測試super.doSomething()。

public class A{
    protected void doSomething(){
        //some Code
    }
}

public class B extends A{
    @Override
    protected void doSomething(){
        //some Code
        super.doSomething();
    }
}

怎么做?

這是不可能的。

嘗試使用合成而不是繼承來使測試正常工作。

我的意思是,如果可能,請執行以下操作:

public class B extends A{

    //notice the composition of class A into class B

    private A a;
    ........

    @Override
    protected void doSomething(){
        //some Code
        a.doSomething();
    }
    ......
}

在這里,您可以輕松地在測試中模擬a

如果這不是您的選擇,那么您將必須模擬super.doSomething()方法中的所有內容。 而且powermockito也可能派上用場。

你為什么還要做這樣的事情?

它給您的保證是: B.doSomething()的行為正確, 只要A.doSomething()永不更改,並且A永遠保持B的超類

您的目標是確定AB的實現嗎? 單元測試的目標通常是相反的-鼓勵重構。 在您的情況下:

  • 如果有人以A.doSomething()方式修改A.doSomething() ,則您的測試仍將通過,( 誤報
  • 如果有人只從B.doSomething()A.doSomething()提取一行代碼(這不太可能,因為他們已經面向代碼重用),那么測試很可能會失敗( 錯誤的否定

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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