5

以下は私のクラスです

public class SomeClass {
    public ReturnType1 testThisMethod(Type1 param1, Type2 param2) {
        //some code
        helperMethodPublic(param1,param2);
        //more code follows  
    }   

    public ReturnType2 helperMethodPublic(Type1 param1, Type2 param2) {
        //some code            
    }
} 

したがって、上記のクラスで testThisMethod() をテストしているときに、helperMethodPublic() を部分的にモックしたいと考えています。

現在のところ、私は次のことを行っています。

SomeClass someClassMock = 
    PowerMock.createPartialMock(SomeClass.class,"helperMethodPublic");
PowerMock.expectPrivate(someClassMock, "helperMethodPublic, param1, param2).
    andReturn(returnObject);

コンパイラは文句を言いません。テストを実行しようとすると、コードが helperMethodPublic() メソッドにヒットすると、コントロールがメソッドに入り、そこにあるコードの各行の実行を開始します。これを防ぐにはどうすればよいですか?

4

3 に答える 3

8

モック フレームワークに依存しない別の解決策は、テスト内で定義された匿名サブクラスで 'helperMethodPublic' をオーバーライドすることです。

SomeClass sc = new SomeClass() {
   @Override
   public ReturnType2 helperMethodPublic(Type1 p1, Type2 p2) {
      return returnObject;
   }
};

次に、このインスタンスをテストで使用すると、元のバージョンの 'testThisMethod' とオーバーライドされたバージョンの 'helperMethodPublic' が実行されます。

于 2012-05-25T16:46:08.337 に答える
4

I think it is because of what Jeff said.

Try this - setting up an expectation just as any other mocked method:

SomeClass someClassMock = PowerMock.createPartialMock(SomeClass.class,
                                                      "helperMethodPublic");

EasyMock.expect(someClassMock.helperMethodPublic(param1, param2)).
    andReturn(returnObject);

PowerMock.replayAll();
于 2012-07-05T18:41:06.807 に答える
1

これは、「helperMethodPublic」がプライベートメソッドではないためだと思います(PowerMock.expectPrivateのように)。PowerMockは、他のモックフレームワークを拡張して、プライベートメソッドや静的メソッド(JMock、Mockitoなどでは処理されない)のモックなどを追加するフレームワークです。パブリックメソッドの部分的なモックを実行することは、基盤となるモックフレームワークが処理するものである必要があります。

于 2012-05-25T16:50:07.403 に答える