How to make mock to void methods with mockitoでこれと同じ質問が重複しています。同様の質問/回答もたくさんありますが、誰も私を助けませんでした。何百もの開発者がいくつかの回答を受け入れているので、私はおそらくどこかで間違っていて、どこに問題があるのか分かりません!voidメソッドをPowerMockitoでモックする方法は?
これは私のサンプルクラスであり、そのメソッドをテストしたいと思います。
final class NavigationBuilder {
@VisibleForTesting List<Intent> mIntentList = new ArrayList<>(5);
@VisibleForTesting
void addNextScreenBasedOnBookingStatus(final Booking booking) {
final ChatMsgDbAsyncHelper helper = new ChatMsgDbAsyncHelper();
if (booking == null) {
helper.cleanAllMessages(mContext); // <= Crash here
}
}
}
これは私のテストクラスである:
@RunWith(PowerMockRunner.class)
@PrepareForTest({ChatMsgDbAsyncHelper.class, SplashActivity.class})
public class NavigationBuilderTest {
private SplashActivity mActivity;
private NavigationBuilder mNavBuilder;
@Before
public void setUp() throws Exception {
mActivity = new SplashActivity();
ISplashView view = mock(ISplashView.class);
PassengerStorage passengerStorage = mock(PassengerStorage.class);
mNavBuilder = new NavigationBuilder(mActivity, view, passengerStorage);
}
@Test
public void addNextScreenBasedOnBookingStatus_whenBookingIsNull() throws Exception {
ChatMsgDbAsyncHelper spy = PowerMockito.spy(new ChatMsgDbAsyncHelper());
PowerMockito.doNothing().when(spy).cleanAllMessages(mActivity);
mNavBuilder.addNextScreenBasedOnBookingStatus(null);
assertTrue(mNavBuilder.mIntentList.isEmpty());
}
}
テストが失敗し、テストがhelper.cleanAllMessages(mContext);
の内部のロジックを実行しているので、理由はNullPointerException
です。上のモックからの私の期待は、それらのロジックが実行されるべきではないということです。
:。 com.xxx.xxx.db.entities.ChatMessageTableでjava.lang.NullPointerExceptionが(ChatMessageTable.java:23)
ので、任意の助けいただければ幸いです。ありがとう。 PowerMockito.doNothing().when(spy).cleanAllMessages(mActivity);
しかし、あなたが実際に渡しているがnullである:与えられたコードで
感謝を。うん、私は実際には、そのリンクで同様の答えを見て、私はこのアプローチに基づいてテスト後に期待したものを得ていない。私はなぜ分かりませんが、うまくいきませんでした。 – Hesam