这是在How to make mock to void methods with mockito的另一个相同的问题的复制副本。还有一堆类似的问题/答案,但没有人帮助我。由于有数百名开发人员接受了一些答案,我可能在某处出错,不知道我的问题在哪里!如何使用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());
}
}
测试失败,原因是NullPointerException
因为测试运行的helper.cleanAllMessages(mContext);
内部逻辑。我从上述模拟的期望是那些逻辑不应该被执行。
所致:在 显示java.lang.NullPointerException com.xxx.xxx.db.entities.ChatMessageTable(ChatMessageTable.java:23)
因此,任何帮助,将不胜感激。谢谢。
感谢您的评论。是的,我实际上在那个链接中看到了类似的答案,并且在基于这种方法进行测试之后没有得到我预期的结果。我不知道为什么,但没有工作,我得到了类似的结果,我在我的问题中提到。 – Hesam