### Question:
KinesisQualityTool { public <TRecord, TResponse> InputSetup<TRecord, TResponse> theInput( WriterProvider<TRecord, TResponse> writerProvider ) { return new InputSetup<>(writerProvider.get(application.getInput(), objectMapper)); } KinesisQualityTool(ApplicationIOProvider application); ObjectMapper getObjectMapper(); void setObjectMapper(ObjectMapper objectMapper); void setReaderProvider(ReaderProvider provider); InputSetup<TRecord, TResponse> theInput(
        WriterProvider<TRecord, TResponse> writerProvider
    ); InputSetup<TRecord, PutRecordsResponse> theInputStream(); OutputVerification<TOutputRecord> theOutput(String name,
                                                                       Class<TOutputRecord> outputRecordClass); OutputVerification<AbstractErrorModel> theErrorOutput(); OutputVerification<T> theErrorOutput(Class<T> errorModelClass);  }### Answer:
@Test public void theInput_GivenWriterProvider_ShouldRequestInputFromAppDetailsAndInvokeProvider() { FakeWriterProvider providerSpy = Mockito.spy(new FakeWriterProvider()); AwsResource mockInput = Mockito.mock(AwsResource.class); Mockito.when(mockDetails.getInput()).thenReturn(mockInput); scenario.theInput(providerSpy); Mockito.verify(mockDetails).getInput(); Mockito.verify(providerSpy).get(mockInput, mockObjectMapper); }