2016-11-01 7 views
1

を使用して、同じクラスからメソッドを模擬する私はJUnitのを使用していますし、私の状況は以下の通りである:どのようにJUnitの

class A{ 
    public int[] method1(){ 
     ... 
     int res = method2(); 
     ... 
     return intArray; 
    } 

    public int method2(){ 
     .... 
     return intA; 
    } 
} 

私はmethod2()

new MockUp<MockClass>() { 
      int[] methodToMock() { 
       int[] mockedResult = {1, 2, 4, 6}; 
       return mockedResult; 
      } 
     }; 

コードの上に模擬するために、以下しようとしていますが正常に動作します私は別のクラスのために使用します。 しかし、私は同じクラスからメソッドを模擬したい場合、それは動作しません。

同じクラスのメソッドをモックするために、私はJUnitで嘲笑方法を見つけてください。

ありがとうございました。

+0

まず、あなたはなぜ「method2」を模倣したいのですか?それはクラスの残りの範囲外の動作を含んでいますか?それを自分のクラスではないにして、それを他のクラスに移してみましょうか? –

+0

使用しているモックフレームワークを教えていませんでした。 * Mockito *を使用する場合は、テスト対象のクラスに「スパイ」を作成し、「method2」の代わりの動作を設定することができます。 –

+0

@TimothyTruckle私はJMockitを使用しています。 – avy

答えて

2

public method同じクラスの別のpublic methodを呼び出す必要はありませんが、ソフトウェア開発では問題はありませんが、クラス内で内部結合が作成され、クラス内で責任が多すぎる可能性があります。 必ずしも真実である必要はありませんが、質問が尋ねられることがあります。
証明:ここでは、単体テストは騙されることなくより困難になります。

私はこのメソッドを他のクラスに移動できません。そして、この方法はまた 他のどこで使用されているので、私は一度にそれをクラブできません。

この2つのパブリックメソッドを保持し、2つのメソッドの共通の動作を考慮する新しいクラスを導入することを提案します。
2つのパブリックメソッドは、処理を行うために共通クラスに依存するようになりました。今

class A{ 

    private CommonProcess commonProcess; 

    public int[] method1(){ 
    ... 
    int res = commonProcess.method(...); 
    ... 
    return intArray; 
    } 

    public int method2(){ 
    .... 
    commonProcess.method(...); 
    ... 
    return intA; 
    } 
} 

、ちょうどcommonProcess.method()への呼び出しをあざける、method2またはmethod1に外部依存関係を模擬します。

+0

回答ありがとうございました:) – avy

+0

あなたは大歓迎です:) – davidxxx

関連する問題