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
입니다. 위의 조롱에서 내 기대는 그 논리를 수행해서는 안됩니다. 에 의한
:. 에서 java.lang.NullPointerException이 com.xxx.xxx.db.entities.ChatMessageTable (ChatMessageTable.java:23는)
그래서, 어떤 도움을 주시면 감사하겠습니다. 감사. PowerMockito.doNothing().when(spy).cleanAllMessages(mActivity);
그러나 당신이 실제로 전달하는 것은 널 : : 주어진 코드
감사합니다. 그래, 실제로 그 링크에서 비슷한 대답을 본 나는이 접근법을 기반으로 테스트 후 기대했던 것을 얻지 못했습니다. 나는 왜 그런지 모르지만 작동하지 않으며 나는 나의 질문에서 언급 한 비슷한 결과를 얻는다. – Hesam