2017-10-10 13 views
0

テスト中のメソッドにコンストラクタ呼び出しがあります。私はUIを起動しようとしているので、それを嘲笑したい。私もコンストラクタの入力を嘲笑したが、それでも実際のインスタンスを作成しようとしている。PowerMockito.whenNewがモックを作成していません。実際のインスタンスが作成されました。

量産コード:

public void methodToTest() { 
    SaveAsDialog sd = new SaveAsDialog(getSite().getShell()); 
    sd.setOriginalFile(file); 
    sd.open() 
} 

テストコード:

Shell mockShell=Mockito.mock(Shell.class); 
    IEditorSite site = Mockito.mock(TestEditorSite.class); 
    Mockito.when(site.getShell()).thenReturn(mockShell); 
    SaveAsDialog dialogMock=Mockito.mock(SaveAsDialog.class); 
    PowerMockito.whenNew(SaveAsDialog.class).withArguments(site.getShell()).thenReturn(dialogMock); 

SaveAsDialog sd = new SaveAsDialog(getSite().getShell());ラインは、それが実際のインスタンスを作成して呼び出されたとき、私はここにどんな事をしないのです。

私はあなたがコンストラクタのパラメータとしてテスト中のあなたのクラスにSaveAsDialogのインスタンスを渡す必要があります

@RunWith(PowerMockRunner.class) 
@PrepareForTest({SaveAsDialog.class}) 

答えて

1

と私のテストを実行しています。これはプレーンなモッキートを使って非常に簡単に嘲笑するでしょう。


あなたはむしろあなたはまた、モックのためにテスト中のあなたのクラスを作成者しなければならないことを意味する正しくPowerMockを使用する必要があなたの悪いデザインに降伏する場合:

@PrepareForTest({SaveAsDialog.class,YourTestedClass.class}) 
+0

ありがとうチモシー、truckle 。出来た。それは私がそれを変更することはできませんレガシーコードです。 – Raghu

+0

あなたがそれを変更できない場合、unittestsには何が必要ですか? –