| package junitparams; |
| |
| import junitparams.internal.TestMethod; |
| import org.junit.Rule; |
| import org.junit.Test; |
| import org.junit.rules.ExpectedException; |
| import org.junit.runner.RunWith; |
| import org.junit.runners.model.FrameworkMethod; |
| import org.junit.runners.model.TestClass; |
| |
| import java.lang.reflect.Method; |
| |
| import static org.assertj.core.api.Assertions.assertThat; |
| |
| @RunWith(JUnitParamsRunner.class) |
| public class ParametersReaderProvidersTest { |
| |
| @Rule |
| public ExpectedException exception = ExpectedException.none(); |
| |
| @Test |
| @Parameters(source = SingleParamSetProvider.class) |
| public void oneParamSetFromClass(String a, String b) { |
| assertThat(a).isEqualTo("a"); |
| assertThat(b).isEqualTo("b"); |
| } |
| |
| public static class SingleParamSetProvider { |
| public static Object[] provideOneParamSetSameTypes() { |
| return new Object[]{"a", "b"}; |
| } |
| } |
| |
| @Test |
| public void shouldPutProviderClassNameInExceptionMessageForProviderWithNoValidMethods() { |
| TestMethod testMethod = getTestMethodWithInvalidProvider(); |
| |
| exception.expect(RuntimeException.class); |
| exception.expectMessage(ProviderClassWithNoValidMethods.class.getName()); |
| testMethod.parametersSets(); |
| } |
| |
| private TestMethod getTestMethodWithInvalidProvider() { |
| // Bug in original code relied on order of Class.getMethods() which is undefined. |
| try { |
| Method testMethod = TestClassWithProviderClassWithNoValidMethods.class |
| .getDeclaredMethod("shouldDoNothingItsJustToConnectTestClassWithProvider"); |
| return new TestMethod(new FrameworkMethod(testMethod), new TestClass(TestClassWithProviderClassWithNoValidMethods.class)); |
| } catch (NoSuchMethodException e) { |
| throw new RuntimeException("Mismatch between method and test class", e); |
| } |
| } |
| |
| @RunWith(JUnitParamsRunner.class) |
| static class TestClassWithProviderClassWithNoValidMethods { |
| @Test |
| @Parameters(source = ProviderClassWithNoValidMethods.class) |
| public void shouldDoNothingItsJustToConnectTestClassWithProvider() { |
| } |
| } |
| |
| static class ProviderClassWithNoValidMethods { |
| } |
| |
| @Test |
| @Parameters(source = OneIntegerProvider.class) |
| public void providedPrimitiveParams(int integer) { |
| assertThat(integer).isLessThan(4); |
| } |
| |
| public static class OneIntegerProvider { |
| public static Object[] provideTwoNumbers() { |
| return new Object[]{new Object[]{1}, new Object[]{2}}; |
| } |
| |
| public static Object[] provideOneNumber() { |
| return new Object[]{new Object[]{3}}; |
| } |
| } |
| |
| @Test |
| @Parameters(source = DomainObjectProvider.class) |
| public void providedDomainParams(DomainClass object1, DomainClass object2) { |
| assertThat(object1.toString()).isEqualTo("testNameOne"); |
| assertThat(object2.toString()).isEqualTo("testNameTwo"); |
| } |
| |
| public static class DomainObjectProvider { |
| public static Object[] provideDomainObject() { |
| return new Object[]{new Object[]{ |
| new DomainClass("testNameOne"), |
| new DomainClass("testNameTwo")}}; |
| } |
| } |
| |
| public static class DomainClass { |
| private final String name; |
| |
| public DomainClass(String name) { |
| this.name = name; |
| } |
| |
| @Override |
| public String toString() { |
| return name; |
| } |
| } |
| } |