вопросы такие: :
- Почему я получаю сообщение об ошибке в этом тесте, хотя я определил класс TD
и заблокировал ответ на вызов API
Почему я получаю сообщение об ошибке в этом тесте, хотя я определил класс TD
и заблокировал ответ для вызова API
li>
Это хороший способ протестировать заглушку ответа метода API. Я пытаюсь смоделировать реальную функциональность внутри метода InitializeReader(), чтобы мне не приходилось иметь дело с каждой строкой внутри.
mockErrorListener.onInitAPISatus(true);
@Mock private Context mockContext;
@Mock private FetchMRZDetails.ListenerMRZ mockErrorListener;
FetchMRZDetails SUT;
@Mock public DocumentReaderInitCompletionTD CompletionMock;
@Mock private DocumentReader mockDocumentReader;
@Before
public void setup() throws Exception {
// Initialize mockContext behavior
SUT = new FetchMRZDetails(mockContext);
SUT.registerListener(mockErrorListener);
}
@Test
public void testInitAPI_Success() {
byte[] license = new byte[] {1, 2, 3, 4}; // Simulated license byte array
doAnswer(
invocation -> {
CompletionMock.onInitCompleted(true, null);
return null;
})
.when(mockDocumentReader)
.initializeReader(
eq(mockContext),
any(DocReaderConfig.class),
any(IDocumentReaderInitCompletion.class));
// Act
SUT.InitAPI(license, mockDocumentReader);
// Assert
// verify that listener on status was called
Mockito.verify(CompletionMock).onInitCompleted(true, null);
Mockito.verify(mockErrorListener).onInitAPISatus(true);
}
public class DocumentReaderInitCompletionTD implements IDocumentReaderInitCompletion {
public void onInitCompleted(boolean success, DocumentReaderException exception) {
mockErrorListener.onInitAPISatus(true);
}
}
Реализация была изменена, чтобы заглушить поведение mockDocumentReader, поскольку он играет роль внутри теста:
Примечание: Раньше я использовал неправильный подход, чтобы имитировать обратный вызов, не проходя его внутри теста.
Тест пройден
when(mockDocumentReader.processParams()).thenReturn(processParam);
scenario1 = new DocumentReaderScenario("MRZ");
scenario2 = new DocumentReaderScenario("");
// Mocking the public field availableScenarios directly
mockScenarios = Arrays.asList(scenario1, scenario2);
mockDocumentReader.availableScenarios = mockScenarios;
@Test
public void testInitAPI_ScenarioAssigned_Success() {
// Arrange
byte[] license = new byte[] {1, 2, 3, 4}; // Simulated license byte array
doAnswer(
invocation -> {
IDocumentReaderInitCompletion completionArg = invocation.getArgument(2);
completionArg.onInitCompleted(true, null);
return null;
})
.when(mockDocumentReader)
.initializeReader(
eq(mockContext),
any(DocReaderConfig.class),
any(IDocumentReaderInitCompletion.class));
// Act
SUT.InitAPI(license, mockDocumentReader);
// Verify that processParams().scenario is set to scenarios.get(0)
verify(mockDocumentReader, times(2)).processParams();
assertEquals(mockScenarios.get(0).name, processParam.scenario);
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... d-listener