0

私はしばらくの間、コードをモックしようとしていました。私はキャッチするために私の前にたくさんのものを嘲笑することに慣れていません。Mockito と Easymock を統合した Powermockito を使用しています。

テストしたいメソッド内にあるメソッドをモックするのに苦労しています。だからここに私が直面した状況の例があります:

public class trialClass {
 public static int try2(){    
        return 3;    
    }

    public static int try(int a){    
        return try2() + a;    
    }
}

私のテストクラスは次のとおりです。

@RunWith(PowerMockRunner.class)
@PrepareForTest(trial.class)
public class trialTest {

    @Before
    public void setUp() throws Exception {    
        PowerMockito.mockStatic(trial.class);    

        //Here I expect try2() to return 10, even it return 3
        PowerMockito.when(trial.try2()).thenReturn(10);    
    }

    @Test
    public void testtry() throws Exception {
        //After try2() returns 10 recursively inside my try() method,
        //I expect result to be 11
        Assert.assertEquals(11, trial.try(1));    
    }
}

私のこの質問は、実際には私のセッション変数から来ています。私のセッションは何らかの値を保持しており、X メソッドはその値を返します。必要なのは、その X メソッドを再帰的にモックすることだけであり、この質問はこのケースをシミュレートするだけです。

助けてくれてありがとう。

4

3 に答える 3

1

使用する必要がありますMockito.CALLS_REAL_METHODS

したがって、テストセットアップでは:

PowerMockito.mockStatic(trial.class, CALLS_REAL_METHODS);
于 2013-10-01T09:45:15.553 に答える
0

編集

Mockito の代わりに EasyMock に変更したくないかもしれないと思いました。その場合は無視してください...

部分的なモッキングは、あなたが求めているキーワードです。すべてをモックする必要はありませんtry2()PowerMock.mockStaticPartial(Class, String...)メソッドを使用する必要があります。

それ以外の

PowerMockito.mockStatic(trialClass.class);    

使用する

PowerMock.mockStaticPartial(trialClass.class, "try2");

そして、実際のモックを行います。

また、上記のコードのようにクラスを定義しtrialClassましたが、2番目のコードで使用trial.classしていることに注意してください...

于 2013-10-01T09:41:01.433 に答える