/** * Creates a list of test methods out of an existing test method and its {@link DataProvider#value()} arguments. * <p> * This method is package private (= visible) for testing. * </p> * * @param testMethod the original test method * @param dataProvider the {@link DataProvider} gives the parameters * @return a list of methods, each method bound to a parameter combination returned by the {@link DataProvider} */ List<FrameworkMethod> explodeTestMethod(FrameworkMethod testMethod, DataProvider dataProvider) { return explodeTestMethod(testMethod, dataProvider.value(), dataProvider); }
+ " either return Object[][], Object[], String[], List<List<Object>> or List<Object>")); if (dataProvider.value().length > 0) { errors.add(new Exception(messageBasePart + " not define @DataProvider.value()"));
/** * Creates a list of test methods out of an existing test method and its {@link DataProvider#value()} arguments. * <p> * This method is package private (= visible) for testing. * </p> * * @param testMethod the original test method * @param dataProvider the {@link DataProvider} gives the parameters * @return a list of methods, each method bound to a parameter combination returned by the {@link DataProvider} */ List<FrameworkMethod> explodeTestMethod(FrameworkMethod testMethod, DataProvider dataProvider) { return explodeTestMethod(testMethod, dataProvider.value(), dataProvider); }
/** * Creates a list of test methods out of an existing test method and its {@link DataProvider#value()} arguments. * <p> * This method is package private (= visible) for testing. * </p> * * @param testMethod the original test method * @param dataProvider the {@link DataProvider} gives the parameters * @return a list of methods, each method bound to a parameter combination returned by the {@link DataProvider} */ List<FrameworkMethod> explodeTestMethod(FrameworkMethod testMethod, DataProvider dataProvider) { return explodeTestMethod(testMethod, dataProvider.value(), dataProvider); }
/** * Creates a list of test methods out of an existing test method and its {@link DataProvider#value()} arguments. * <p> * This method is package private (= visible) for testing. * </p> * * @param testMethod the original test method * @param dataProvider the {@link DataProvider} gives the parameters * @return a list of methods, each method bound to a parameter combination returned by the {@link DataProvider} */ List<FrameworkMethod> explodeTestMethod(FrameworkMethod testMethod, DataProvider dataProvider) { return explodeTestMethod(testMethod, dataProvider.value(), dataProvider); }
+ " either return Object[][], Object[], String[], Iterable<Iterable<?>>, or Iterable<?>, whereby any subtype of Iterable as well as an arbitrary inner type are also accepted")); if (dataProvider.value().length > 0) { errors.add(new Exception(messageBasePart + " not define @DataProvider.value()"));
+ " either return Object[][], Object[], String[], Iterable<Iterable<?>>, or Iterable<?>, whereby any subtype of Iterable as well as an arbitrary inner type are also accepted")); if (dataProvider.value().length > 0) { errors.add(new Exception(messageBasePart + " not define @DataProvider.value()"));
+ " either return Object[][], Object[], String[], Iterable<Iterable<?>>, or Iterable<?>, whereby any subtype of Iterable as well as an arbitrary inner type are also accepted")); if (dataProvider.value().length > 0) { errors.add(new Exception(messageBasePart + " not define @DataProvider.value()"));
@Test public void testValidateDataProviderMethodShouldAddNoErrorIfDataProviderMethodIsValid() { // Given: String dataProviderName = "validDataProvider"; List<Throwable> errors = new ArrayList<Throwable>(); doReturn(dataProviderName).when(dataProviderMethod).getName(); doReturn(getMethod("validDataProviderMethod")).when(dataProviderMethod).getMethod(); doReturn(true).when(dataConverter).canConvert(any(Type.class)); doReturn(new String[0]).when(dataProvider).value(); // When: underTest.validateDataProviderMethod(dataProviderMethod, dataProvider, errors); // Then: assertThat(errors).isEmpty(); }
@Test public void testValidateDataProviderMethodShouldAddNoErrorIfDataProviderMethodWithFrameworkMethodParameterIsValid() { // Given: String dataProviderName = "validDataProvider"; List<Throwable> errors = new ArrayList<Throwable>(); doReturn(dataProviderName).when(dataProviderMethod).getName(); doReturn(getMethod("validDataProviderMethodWithFrameworkMethodParameter")).when(dataProviderMethod).getMethod(); doReturn(true).when(dataConverter).canConvert(any(Type.class)); doReturn(new String[0]).when(dataProvider).value(); // When: underTest.validateDataProviderMethod(dataProviderMethod, dataProvider, errors); // Then: assertThat(errors).isEmpty(); }
@Test public void testValidateDataProviderMethodShouldAddErrorIfDataProviderMethodIsNotPublic() { // Given: String dataProviderName = "dataProviderNotPublic"; List<Throwable> errors = new ArrayList<Throwable>(); doReturn(dataProviderName).when(dataProviderMethod).getName(); doReturn(getMethod("nonPublicDataProviderMethod")).when(dataProviderMethod).getMethod(); doReturn(true).when(dataConverter).canConvert(any(Type.class)); doReturn(new String[0]).when(dataProvider).value(); // When: underTest.validateDataProviderMethod(dataProviderMethod, dataProvider, errors); // Then: assertThat(errors).hasSize(1); assertThat(errors.get(0).getMessage()).contains(dataProviderName).containsIgnoringCase("must be public"); }
@Test public void testValidateDataProviderMethodShouldAddErrorIfDataProviderMethodReturnsNonConvertableType() { // Given: String dataProviderName = "dataProviderNonConvertableReturnType"; List<Throwable> errors = new ArrayList<Throwable>(); doReturn(dataProviderName).when(dataProviderMethod).getName(); doReturn(getMethod("validDataProviderMethod")).when(dataProviderMethod).getMethod(); doReturn(false).when(dataConverter).canConvert(any(Type.class)); doReturn(new String[0]).when(dataProvider).value(); // When: underTest.validateDataProviderMethod(dataProviderMethod, dataProvider, errors); // Then: assertThat(errors).hasSize(1); assertThat(errors.get(0).getMessage()).contains(dataProviderName).containsIgnoringCase( "must either return Object[][], Object[], String[], Iterable<Iterable<?>>, or Iterable<?>"); }
@Test public void testValidateDataProviderMethodShouldAddErrorIfDataProviderMethodIsNotStatic() { // Given: String dataProviderName = "dataProviderNotStatic"; List<Throwable> errors = new ArrayList<Throwable>(); doReturn(dataProviderName).when(dataProviderMethod).getName(); doReturn(getMethod("nonStaticDataProviderMethod")).when(dataProviderMethod).getMethod(); doReturn(true).when(dataConverter).canConvert(any(Type.class)); doReturn(new String[0]).when(dataProvider).value(); // When: underTest.validateDataProviderMethod(dataProviderMethod, dataProvider, errors); // Then: assertThat(errors).hasSize(1); assertThat(errors.get(0).getMessage()).contains(dataProviderName).containsIgnoringCase("must be static"); }
@Test public void testValidateDataProviderMethodShouldAddErrorIfDataProviderMethodRequiresOneParametersOfInvalidType() { // Given: String dataProviderName = "dataProviderNonNoArg"; List<Throwable> errors = new ArrayList<Throwable>(); doReturn(dataProviderName).when(dataProviderMethod).getName(); doReturn(getMethod("wrongArgDataProviderMethod")).when(dataProviderMethod).getMethod(); doReturn(true).when(dataConverter).canConvert(any(Type.class)); doReturn(new String[0]).when(dataProvider).value(); // When: underTest.validateDataProviderMethod(dataProviderMethod, dataProvider, errors); // Then: assertThat(errors).hasSize(1); assertThat(errors.get(0).getMessage()).contains(dataProviderName).containsIgnoringCase( "must either have a single FrameworkMethod parameter or none"); }
@Test public void testValidateDataProviderMethodShouldAddErrorIfDataProviderMethodRequiresTwoParameters() { // Given: String dataProviderName = "dataProviderNonNoArg"; List<Throwable> errors = new ArrayList<Throwable>(); doReturn(dataProviderName).when(dataProviderMethod).getName(); doReturn(getMethod("twoArgDataProviderMethod")).when(dataProviderMethod).getMethod(); doReturn(true).when(dataConverter).canConvert(any(Type.class)); doReturn(new String[0]).when(dataProvider).value(); // When: underTest.validateDataProviderMethod(dataProviderMethod, dataProvider, errors); // Then: assertThat(errors).hasSize(1); assertThat(errors.get(0).getMessage()).contains(dataProviderName).containsIgnoringCase( "must either have a single FrameworkMethod parameter or none"); }
@Test public void testValidateDataProviderMethodShouldAddErrorIfDataProviderDefinesValue() { // Given: String dataProviderName = "dataProviderNonConvertableReturnType"; List<Throwable> errors = new ArrayList<Throwable>(); doReturn(dataProviderName).when(dataProviderMethod).getName(); doReturn(getMethod("validDataProviderMethod")).when(dataProviderMethod).getMethod(); doReturn(true).when(dataConverter).canConvert(any(Type.class)); doReturn(new String[] { "test" }).when(dataProvider).value(); // When: underTest.validateDataProviderMethod(dataProviderMethod, dataProvider, errors); // Then: assertThat(errors).hasSize(1); assertThat(errors.get(0).getMessage()).contains(dataProviderName).containsIgnoringCase( "must not define @DataProvider.value()"); }
@Test public void testValidateDataProviderMethodShouldAddErrorsIfDataProviderMethodIsCompletelyWrong() { // Given: String dataProviderName = "dataProviderNotPublicNotStaticNonNoArg"; List<Throwable> errors = new ArrayList<Throwable>(); doReturn(dataProviderName).when(dataProviderMethod).getName(); doReturn(getMethod("nonPublicNonStaticNonNoArgDataProviderMethod")).when(dataProviderMethod).getMethod(); doReturn(false).when(dataConverter).canConvert(any(Type.class)); doReturn(new String[] { "test" }).when(dataProvider).value(); // When: underTest.validateDataProviderMethod(dataProviderMethod, dataProvider, errors); // Then: assertThat(errors).hasSize(5); assertThat(errors.get(0).getMessage()).contains(dataProviderName).containsIgnoringCase("must be public"); assertThat(errors.get(1).getMessage()).contains(dataProviderName).containsIgnoringCase("must be static"); assertThat(errors.get(2).getMessage()).contains(dataProviderName).containsIgnoringCase( "must either have a single FrameworkMethod parameter or none"); assertThat(errors.get(3).getMessage()).contains(dataProviderName).containsIgnoringCase( "must either return Object[][], Object[], String[], Iterable<Iterable<?>>, or Iterable<?>"); assertThat(errors.get(4).getMessage()).contains(dataProviderName).containsIgnoringCase( "must not define @DataProvider.value()"); }