package org.test4j.tools.commons; import java.lang.reflect.Field; import java.util.List; import org.test4j.fortest.beans.Manager; import org.test4j.testng.Test4J; import org.test4j.tools.exception.NoSuchFieldRuntimeException; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; @Test(groups = "test4j") public class FieldHelperTest extends Test4J { @Test(dataProvider = "getFieldData") public void testGetField(String fieldname, String value) throws IllegalArgumentException, IllegalAccessException { Object target = new ChildClaz(); Field field = FieldHelper.getField(ChildClaz.class, fieldname); field.setAccessible(true); String result = (String) field.get(target); want.string(result).isEqualTo(value); } @Test(expectedExceptions = NoSuchFieldRuntimeException.class) public void testGetField_NoSuchField() { FieldHelper.getField(ChildClaz.class, "no_such_field"); } @DataProvider public Object[][] getFieldData() { return new Object[][] { { "static_field", "ChildClaz" }, // <br> { "public_field", "ChildClaz" }, // <br> { "private_field", "ChildClaz" }, // <br> { "parent_static_field", "ParentClaz" }, // <br> { "parent_public_field", "ParentClaz" }, // <br> { "parent_private_field", "ParentClaz" } // <br> }; } @SuppressWarnings("unused") public static class ParentClaz { static String static_field = "ParentClaz"; public String public_field = "ParentClaz"; private final String private_field = "ParentClaz"; // only parent have static String parent_static_field = "ParentClaz"; public String parent_public_field = "ParentClaz"; private final String parent_private_field = "ParentClaz"; } @SuppressWarnings("unused") public static class ChildClaz extends ParentClaz { static String static_field = "ChildClaz"; public String public_field = "ChildClaz"; private final String private_field = "ChildClaz"; } @Test public void testGetAllFields() { List<Field> fields = ClazzHelper.getAllFields(Manager.class, null, false, false, false); want.collection(fields).sizeEq(4) .propertyEq("name", new String[] { "secretary", "phoneNumber", "name", "date" }); } }