2017-04-06 16 views
1

我是JMockit和junit的新手。我正在處理一個例子,其中一個子類直接引用它的父類的一個成員(我知道,不理想,但這是我所交的)。JMockit,子類直接引用父類的成員

例如:

public class A { 
    protected Something X; 
    public A() { 
     X = new Something(); 
    } 
} 

public class B extends A { 

    public void methodUnderTest() { 
    X.somethingMoreSpecific(); 
    } 
} 

我已經能夠模擬父類的方法很好,但我該如何處理與被測試的類,引用它的一個父成員直接對象?

回答

0

關於設計,B引用x(它是成員)的A不必是錯誤的設計 - 它取決於上下文 - 但它是不同的主題。

回到測試你要測試B - 這也是A。你試圖把A看作是B引用的 - 不是。也許你應該在這裏考慮構圖而不是繼承。

因爲現在你可以測試B並忘記A.如果你在A中有X的setter,那麼你在B中有X的setter(除非它是私有的) - 你可以使用它。

什麼是不是在這裏一個好主意是創建X內部構造與無參數這使得X與一個緊密coupuled和problably是your're試圖嘲笑A.

0

的事實,理由你所引用的A的字段實際上既不在這裏,也不在那裏。 A的字段是B的字段...

因此忘掉A。你有兩種選擇:你可以模擬X並且只需確認B.methodUnderTest()調用X.somethingMoreSpecific(),或者你可以讓X獨立並且測試X.somethingMoreSpecific()確實發生在你撥打B.methodUnderTest()時發生的所有事情。我贊成前者,因爲X.somethingMoreSpecific()應該有自己的單元測試,但是你可以任意選擇。