/** * {@inheritDoc} * <p> * Is copied from {@link BlockJUnit4ClassRunner#validateInstanceMethods} because {@link #computeTestMethods()} must * not be called if validation already found errors! */ @Override @Deprecated protected void validateInstanceMethods(List<Throwable> errors) { validatePublicVoidNoArgMethods(After.class, false, errors); validatePublicVoidNoArgMethods(Before.class, false, errors); validateTestMethods(errors); if (errors.isEmpty() && computeTestMethods().size() == 0) { errors.add(new Exception("No runnable methods")); } }
@Override protected List<FrameworkMethod> computeTestMethods() { return super.computeTestMethods(); }
/** * {@inheritDoc} * <p> * Is copied from {@link BlockJUnit4ClassRunner#validateInstanceMethods} because {@link #computeTestMethods()} must * not be called if validation already found errors! */ @Override @Deprecated protected void validateInstanceMethods(List<Throwable> errors) { validatePublicVoidNoArgMethods(After.class, false, errors); validatePublicVoidNoArgMethods(Before.class, false, errors); validateTestMethods(errors); if (errors.isEmpty() && computeTestMethods().size() == 0) { errors.add(new Exception("No runnable methods")); } }
/** * {@inheritDoc} * <p> * Is copied from {@link BlockJUnit4ClassRunner#validateInstanceMethods} because {@link #computeTestMethods()} must * not be called if validation already found errors! */ @Override @Deprecated protected void validateInstanceMethods(List<Throwable> errors) { validatePublicVoidNoArgMethods(After.class, false, errors); validatePublicVoidNoArgMethods(Before.class, false, errors); validateTestMethods(errors); if (errors.isEmpty() && computeTestMethods().size() == 0) { errors.add(new Exception("No runnable methods")); } }
/** * {@inheritDoc} * <p> * Is copied from {@link BlockJUnit4ClassRunner#validateInstanceMethods} because {@link #computeTestMethods()} must * not be called if validation already found errors! */ @Override @Deprecated protected void validateInstanceMethods(List<Throwable> errors) { validatePublicVoidNoArgMethods(After.class, false, errors); validatePublicVoidNoArgMethods(Before.class, false, errors); validateTestMethods(errors); if (errors.isEmpty() && computeTestMethods().size() == 0) { errors.add(new Exception("No runnable methods")); } }
@Test public void testValidateInstanceMethodsShouldAddExceptionIfComputeTestMethodsReturnsNoTestMethods() { // Given: List<Throwable> errors = new ArrayList<Throwable>(); doReturn(asList()).when(underTest).computeTestMethods(); // When: underTest.validateInstanceMethods(errors); // Then: assertThat(errors).hasSize(1); assertThat(errors.get(0)).hasMessage("No runnable methods"); }
@Test public void testValidateInstanceMethodsShouldNotThrowExceptionIfNoErrorsExistAndTestMethodsAreAvailable() { // Given: List<Throwable> errors = new ArrayList<Throwable>(); doReturn(asList(testMethod)).when(underTest).computeTestMethods(); // When: underTest.validateInstanceMethods(errors); // Then: assertThat(errors).isEmpty(); }
@Test public void testComputeTestMethodsShouldNotCallGenerateExplodedTestMethodsAndUseCachedResultIfCalledTheSecondTime() { // Given: final List<FrameworkMethod> expected = new ArrayList<FrameworkMethod>(); underTest.computedTestMethods = expected; doReturn(expected).when(underTest).generateExplodedTestMethodsFor(anyListOf(FrameworkMethod.class)); // When: List<FrameworkMethod> result = underTest.computeTestMethods(); // Then: assertThat(result).isSameAs(expected); assertThat(underTest.computedTestMethods).isSameAs(expected); verify(underTest).computeTestMethods(); verifyNoMoreInteractions(underTest); }
@Test public void testComputeTestMethodsShouldCallGenerateExplodedTestMethodsAndCacheResultIfCalledTheFirstTime() { // Given: underTest.computedTestMethods = null; doReturn(new ArrayList<FrameworkMethod>()).when(underTest) .generateExplodedTestMethodsFor(anyListOf(FrameworkMethod.class)); // When: List<FrameworkMethod> result = underTest.computeTestMethods(); // Then: assertThat(result).isEqualTo(underTest.computedTestMethods); InOrder inOrder = inOrder(underTest); inOrder.verify(underTest).computeTestMethods(); inOrder.verify(underTest).generateExplodedTestMethodsFor(anyListOf(FrameworkMethod.class)); verifyNoMoreInteractions(underTest); }
@Test public void testValidateInstanceMethodsShouldNotThrowExceptionIfComputeTestMethodsWouldThrowExceptionButErrorsAlreadyExistsBefore() { // Given: List<Throwable> errors = new ArrayList<Throwable>(); doAnswer(new Answer<Void>() { @Override public Void answer(InvocationOnMock invocation) throws Throwable { ((List<Throwable>) invocation.getArguments()[0]).add(new Error()); return null; } }).when(underTest).validateTestMethods(errors); doThrow(IllegalArgumentException.class).when(underTest).computeTestMethods(); // When: underTest.validateInstanceMethods(errors); // Then: assertThat(errors).hasSize(1); }