package org.unitils; import java.util.ArrayList; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.junit.internal.runners.TestClass; import org.junit.runner.RunWith; import org.unitils.UnitilsParameterized.TestClassRunnerForParameters; import org.unitils.UnitilsParameterized.UnitilsMethodValidator; import org.unitils.parameterized.JustATestClass; import org.unitils.parameterized.UnitilsParametersNullParametersStveParametersTest; import org.unitils.util.ReflectionUtils; /** * Parameterized runner. * * @author Jeroen Horemans * @author Thomas De Rycke * @author Willemijn Wouters * * @since 3.4 * */ @SuppressWarnings("deprecation") @RunWith(UnitilsJUnit4TestClassRunner.class) public class UnitilsParameterizedTest { @Test public void testValidateTestMethods() throws Throwable { UnitilsMethodValidator methodValidator = new UnitilsMethodValidator(new TestClass(JustATestClass.class)); methodValidator.validateTestMethods(Test.class, false); Assert.assertEquals(getErrors().get(0).getMessage(), methodValidator.getErrors().get(0).getMessage()); Assert.assertEquals(getErrors().get(1).getMessage(), methodValidator.getErrors().get(1).getMessage()); Assert.assertEquals(getErrors().get(2).getMessage(), methodValidator.getErrors().get(2).getMessage()); Assert.assertEquals(getErrors().get(3).getMessage(), methodValidator.getErrors().get(3).getMessage()); } @Test public void testGetParametersMethod() { UnitilsMethodValidator methodValidator = new UnitilsMethodValidator(new TestClass(Testclass2.class)); methodValidator.validateInstanceMethods(); Assert.assertTrue(methodValidator.getErrors() != null && !methodValidator.getErrors().isEmpty()); Assert.assertEquals("No runnable methods", methodValidator.getErrors().get(0).getMessage()); } @Test(expected = Exception.class) public void testComputeParams() throws Throwable { List<Object[]> data = new ArrayList<Object[]>(); List<int[]> data2 = new ArrayList<int[]>(); data2.add(new int[]{1}); data2.add(new int[]{1, 2}); data2.add(new int[]{1, 2, 3}); TestClassRunnerForParameters runner = new UnitilsParameterized(UnitilsParametersNullParametersStveParametersTest.class).new TestClassRunnerForParameters(UnitilsParametersNullParametersStveParametersTest.class, data, 1); ReflectionUtils.setFieldValue(runner, "fParameterList", data2); runner.computeParams(); } @Test(expected = IndexOutOfBoundsException.class) public void testGetName() throws Throwable { List<Object[]> data = new ArrayList<Object[]>(); List<int[]> data2 = new ArrayList<int[]>(); data2.add(new int[]{1}); data2.add(new int[]{1, 2}); data2.add(new int[]{1, 2, 3}); TestClassRunnerForParameters runner = new UnitilsParameterized(UnitilsParametersNullParametersStveParametersTest.class).new TestClassRunnerForParameters(UnitilsParametersNullParametersStveParametersTest.class, data, 6); ReflectionUtils.setFieldValue(runner, "fParameterList", data2); runner.getName(); } @Test public void testValidateArgConstructorNoParameters() throws Exception { UnitilsMethodValidator validator = new UnitilsMethodValidator(new TestClass(JustATestClass.class)); validator.validateArgConstructor(); Assert.assertFalse(validator.getErrors().isEmpty()); } @Test public void testValidateArgConstructorWithParameters() throws Exception { UnitilsMethodValidator validator = new UnitilsMethodValidator(new TestClass(Testclass3.class)); validator.validateArgConstructor(); Assert.assertTrue(validator.getErrors().isEmpty()); } private List<Throwable> getErrors() { List<Throwable> lst = new ArrayList<Throwable>(); lst.add(new Exception("Method test1() should not be static")); lst.add(new Exception("Method test2 should be public")); lst.add(new Exception("Method test3 should be void")); lst.add(new Exception("Method test4 should have no parameters")); return lst; } private class Testclass2 { //just an empty testclass } private class Testclass3 { public Testclass3() { //do nothing } } private class TestClass4 { public TestClass4(int i) { //do nothing } } }