2017-04-06 21 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

AのBを参照するB(メンバーである)は間違ったデザインである必要はなく、コンテキストにもよりますが、別のトピックです。

テストに戻ると、Bもテストされます。これもAです。あなたはBで参照されているようにAを扱おうとしています - そうではありません。たぶんあなたはここで継承の代わりに構成を考えるべきでしょう。

今のところ、BをテストしてAを忘れることができます.AのXにsetterを設定している場合、BのXの設定ツールがあります(プライベートでない限り)。ここでは良いアイデアではありません何

は、あなたがしっかりAとcoupuled Xを作った引数なしでコンストラクタの内部でXを作成したことで、problablyそれはyour'reはA.に

0

という事実を模擬しようとしている理由は、あなたはAのフィールドを参照していますが、実際にここにもそこにはありません。 Aのフィールドは、Bのフィールドです。

したがって、Aを忘れてしまいます。あなたはXを模倣し、B.methodUnderTest()X.somethingMoreSpecific()を呼び出していることを確認するか、B.methodUnderTest()に電話したときにXだけを残して、X.somethingMoreSpecific()が起こるすべてのさまざまなことをテストすることができます。 X.somethingMoreSpecific()には独自のユニットテストが必要ですが、私は前者を好むでしょうが、いずれにしても行くことができます。

関連する問題