2016-08-17 16 views
0

私はjunitに取り組んでおり、PowerMockRunnerを使って静的メソッドをモックしています。に任意の呼び出しで JUnit:メソッド呼び出しをインターセプトし、別のパラメータで呼び出す

public static void addInputPath(String, Boolean, Integer, Double) 

が、私は三番目のパラメータを必要とする(整数):

は、私は4つの引数を取り、特定の方法を模擬する必要がある静的メソッドは

when(...).thenReturn(...)を使用して嘲笑することができることを承知していますこの方法は、たとえば10と置き換えます。他のすべてのパラメータはそのまま渡す必要があります。言い換えれば

は、私はこのような何かをする必要があります。

when(addInputPath(str, bool, intgr, dbl)).thenReturn(addInputPath(str, bool, 10, dbl)); 

これを行う方法はありますか?

+0

このスレッドでは、このスレッドで答える: http://stackoverflow.com/questions/5462096/stubbing-a-method-that-takes-classt-as-parameter-with-mockito – kolakao

+0

私はそれを信じていない引数を置き換えることができます。あなたができることは、指定された引数に対してメソッドの戻り値を与えることです。 –

+0

@kolakaoそれが私の望むものかどうかはわかりません。私の質問を簡略化しました。 –

答えて

0

あなたが実際にやりたかったことは、インターセプト addInputPath()の呼び出しとそれを別のパラメータで呼び出すことです。

もしそうなら、私はこれがどんなモックフレームワークでもできるのかどうかは確かではありません。 Mockingフレームワークは約です。が呼び出されます。コールの計測/傍受についてではありません。

あなたの問題に戻って、これは良い例ですの静的が頻繁に問題を引き起こします。したがって、私の目では、addInputPath()を直接呼び出すことを避けるために、xyz()メソッドを変更するのが最適な解決策です。このように:

interface InputPathAdder { 
    void addInputPath(str, ...); 
} 

class ForwardingInputPathAdder implements InputPathAdder { 
    // implements the method by calling the static method 

と突然、あなたも行うことができます。

class ForwardingInputPathAdderWithFixedIntegerParm implements InputPathAdder { 
    // implements the method by calling the static method, but using 10 always 

(明らかに、命名がここに改善することができる)

そして今:あなたが与える依存性注入を使用しますInputPathAdderを実装しているオブジェクトの「テスト対象のクラス」。これは、テストのために完全に嘲笑されたものでも、それは転送するだけのもの(プロダクション環境で、または第3パラメータを修正するものでもよい)です。あなたの「傍受」状況を嘲笑する必要はありません。

関連する問題