/** * {@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 void validateTestMethods(List<Throwable> errors) { super.validateTestMethods(errors); } }
/** * {@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(expected = NullPointerException.class) public void testValidateTestMethodsShouldThrowNullPointerExceptionIfArgumentIsNull() { // Given: // When: underTest.validateTestMethods(null); // Then: expect exception }
@Test(expected = IllegalStateException.class) public void testValidateTestMethodsShouldThrowIllegalStateExceptionIfDataProviderAnnotationNotFoundOnDataProviderMethod() { // Given: doReturn(asList(testMethod)).when(testClass).getAnnotatedMethods(UseDataProvider.class); doReturn(asList(dataProviderMethod)).when(underTest).getDataProviderMethods(testMethod); List<Throwable> errors = new ArrayList<Throwable>(); // When: underTest.validateTestMethods(errors); // Then: expect exception }
@Test public void testValidateTestMethodsShouldCallTestValidatorValidateTestMethodForSingleTestMethod() { // Given: doReturn(asList(testMethod)).when(testClass).getAnnotatedMethods(Test.class); List<Throwable> errors = new ArrayList<Throwable>(); // When: underTest.validateTestMethods(errors); // Then: verify(testValidator).validateTestMethod(testMethod, errors); verifyNoMoreInteractions(testValidator); }
@Test public void testValidateTestMethodsShouldCallTestValidatorValidateDataProviderMethodIfDataProviderMethodFound() { // Given: doReturn(asList(testMethod)).when(testClass).getAnnotatedMethods(UseDataProvider.class); doReturn(asList(dataProviderMethod)).when(underTest).getDataProviderMethods(testMethod); doReturn(dataProvider).when(dataProviderMethod).getAnnotation(DataProvider.class); List<Throwable> errors = new ArrayList<Throwable>(); // When: underTest.validateTestMethods(errors); // Then: verify(testValidator).validateDataProviderMethod(dataProviderMethod, dataProvider, errors); verifyNoMoreInteractions(testValidator); }
@Test public void testValidateTestMethodsShouldAddErrorIfDataProviderMethodNotFoundForMethodWithUseDataProviderUsingOnlyDefaultResolver() { // Given: doReturn(asList(testMethod)).when(testClass).getAnnotatedMethods(UseDataProvider.class); doReturn(emptyList()).when(underTest).getDataProviderMethods(testMethod); doReturn(useDataProvider).when(testMethod).getAnnotation(UseDataProvider.class); doReturn(new Class<?>[] { DefaultDataProviderMethodResolver.class }).when(useDataProvider).resolver(); List<Throwable> errors = new ArrayList<Throwable>(); // When: underTest.validateTestMethods(errors); // Then: assertThat(errors).hasSize(1); assertThat(errors.get(0).getMessage()) .contains("No valid dataprovider found for test 'testMethod' using the default resolver. By convention") .contains("or is explicitely set"); verifyZeroInteractions(testValidator); }
@Test public void testValidateTestMethodsShouldCallTestValidatorValidateTestMethodForMultipleTestMethods() { // Given: FrameworkMethod testMethod2 = mock(FrameworkMethod.class); FrameworkMethod testMethod3 = mock(FrameworkMethod.class); doReturn(asList(testMethod, testMethod2, testMethod3)).when(testClass).getAnnotatedMethods(Test.class); List<Throwable> errors = new ArrayList<Throwable>(); // When: underTest.validateTestMethods(errors); // Then: verify(testValidator).validateTestMethod(testMethod, errors); verify(testValidator).validateTestMethod(testMethod2, errors); verify(testValidator).validateTestMethod(testMethod3, errors); verifyNoMoreInteractions(testValidator); }
@Test public void testValidateTestMethodsShouldAddErrorIfDataProviderMethodNotFoundForMethodWithUseDataProviderUsingAdditionalCustomResolver() { // Given: doReturn(asList(testMethod)).when(testClass).getAnnotatedMethods(UseDataProvider.class); doReturn(Collections.emptyList()).when(underTest).getDataProviderMethods(testMethod); doReturn(useDataProvider).when(testMethod).getAnnotation(UseDataProvider.class); doReturn(new Class<?>[] { null, DefaultDataProviderMethodResolver.class }).when(useDataProvider).resolver(); List<Throwable> errors = new ArrayList<Throwable>(); // When: underTest.validateTestMethods(errors); // Then: assertThat(errors).hasSize(1); assertThat(errors.get(0).getMessage()).contains("No valid dataprovider found for test 'testMethod' using custom resolvers: ") .containsIgnoringCase("[null, " + DefaultDataProviderMethodResolver.class + "]. Please examine"); verifyZeroInteractions(testValidator); }
@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); }
@Test public void testValidateTestMethodsShouldWorkCorrectlyForMultipleMethodsAnnotatedWithUseDataProvider() { // Given: FrameworkMethod testMethod2 = mock(FrameworkMethod.class); UseDataProvider useDataProvider2 = mock(UseDataProvider.class); FrameworkMethod dataProviderMethod2 = mock(FrameworkMethod.class); DataProvider dataProvider2 = mock(DataProvider.class); FrameworkMethod testMethod3 = mock(FrameworkMethod.class); UseDataProvider useDataProvider3 = mock(UseDataProvider.class); doReturn(asList(testMethod, testMethod2, testMethod3)).when(testClass).getAnnotatedMethods(UseDataProvider.class); doReturn(useDataProvider).when(testMethod).getAnnotation(UseDataProvider.class); doReturn(asList(dataProviderMethod)).when(underTest).getDataProviderMethods(testMethod); doReturn(dataProvider).when(dataProviderMethod).getAnnotation(DataProvider.class); doReturn(useDataProvider2).when(testMethod2).getAnnotation(UseDataProvider.class); doReturn(asList(dataProviderMethod2)).when(underTest).getDataProviderMethods(testMethod2); doReturn(dataProvider2).when(dataProviderMethod2).getAnnotation(DataProvider.class); doReturn(useDataProvider3).when(testMethod3).getAnnotation(UseDataProvider.class); doReturn(emptyList()).when(underTest).getDataProviderMethods(testMethod3); doReturn(new Class<?>[] { DataProviderMethodResolver.class }).when(useDataProvider3).resolver(); List<Throwable> errors = new ArrayList<Throwable>(); // When: underTest.validateTestMethods(errors); // Then: assertThat(errors).hasSize(1); assertThat(errors.get(0).getMessage()).containsIgnoringCase("no valid dataprovider found for test"); verify(testValidator).validateDataProviderMethod(dataProviderMethod, dataProvider, errors); verify(testValidator).validateDataProviderMethod(dataProviderMethod2, dataProvider2, errors); verifyNoMoreInteractions(testValidator); }