powerMockまたはEasyMockだけを使って別のクラスで使われているクラスを模擬する方法はありますか?私はこの2つのフレームワークしか使えません。私はMockitoを使うことができますが、コードベースにはeasymockとpowermockライブラリのみがあります。フレームワークのみ。模擬テスト中のクラスで使用されている別のクラスを模倣しますか?
は、私が)(SecondClass.getVoidCallメソッドをモックとしたい(私はpowerMockを使用しています)
public class ClassUnderTest {
public void getRecord() {
System.out.println("1: In getRecord \n");
System.out.println("\n 3:"+SecondClass.getVoidCall());
System.out.println("\n 4: In getRecord over \n");
}
}
コードの下に持っています。
public class ArpitSecondClass {
public static int getVoidCall() {
System.out.println("\n 2: In ArpitSecondClass getVoidCall for kv testing\n");
return 10;
}
}
私のユニットテストコードは
@RunWith(PowerMockRunner.class)
@PrepareForTest(TestArpit.class)
public class UniteTestClass {
@Test
public void testMock() throws Exception {
SecondClass class2 = createMock(SecondClass.class);
expect(class2.getVoidCall()).andReturn(20).atLeastOnce();
expectLastCall().anyTimes();
ClassUnderTest a=new ClassUnderTest();
a.getRecord();
replayAll();
PowerMock.verify();
}
}
基本的に私は
1: In getRecord
2: In ArpitSecondClass getVoidCall for kv testing
3:20 (Note:This should be overriden by the value I supplied in UnitTest)
4: In getRecord over
以下のような出力をしたいしかし、私はUnitestコードを取得しています出力は
2: In ArpitSecondClass getVoidCall for kv testing
です
コードフローdoes not go b (class2.getVoidCall())。andReturn(20).atLeastOnce();
getRecordの残りのステートメントは、一度も呼び出されないので印刷されません。
ここに何か不足していますか?
静的メソッドを使用しては悪い習慣です柔軟性がなく、再利用するのが難しいコード。したがって、あなたに悪いデザインを渡して* PowerMock *を使う代わりに、 'ArpitSecondClass'のメソッドから' static'キーワードを削除し、このクラスのインスタンスをコンストラクタパラメータとしてテスト対象のクラスに渡すべきです。 –