UseCase { public void execute(final Subscriber<T> useCaseSubscriber) { this.mSubscription = this.buildUseCaseObservable() .subscribeOn(Schedulers.from(mThreadExecutor)) .observeOn(mPostExecutionThread.getScheduler()) .subscribe(useCaseSubscriber); } protected  UseCase(final ThreadExecutor threadExecutor,
      final PostExecutionThread postExecutionThread); void execute(final Subscriber<T> useCaseSubscriber); void destroy();  }
@Test public void testBuildUseCaseObservableReturnsCorrectResult() { final TestSubscriber<List<Integer>> testSubscriber = new TestSubscriber<>(); mSut.execute(testSubscriber); testSubscriber.assertReceivedOnNext(Collections.singletonList(STUB)); testSubscriber.assertNoErrors(); testSubscriber.assertCompleted(); }