Skip to content

Instantly share code, notes, and snippets.

@fumokmm
Created April 28, 2012 16:38
Show Gist options
  • Select an option

  • Save fumokmm/2520131 to your computer and use it in GitHub Desktop.

Select an option

Save fumokmm/2520131 to your computer and use it in GitHub Desktop.
PropertyDescriptorのテスト
package fumokmm.npnl;
import static org.junit.Assert.*;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Test;
public class PropertyDescriptorTest {
/**
* Bean
* @author fumo
*/
private static class User {
private String name;
public String getName() { return name; }
public void setName(String name) { this.name = name; }
}
@Test
public void testPropertyDescriptor() throws Exception {
// Bean生成
User userBean = new User();
userBean.setName("fumo");
// デスクリプタを用意
PropertyDescriptor nameProp = new PropertyDescriptor("name", User.class);
// or... new PropertyDescriptor("name", userBean.getClass());
// ゲッターメソッド取得
Method nameGetter = nameProp.getReadMethod();
String name = (String) nameGetter.invoke(userBean, (Object[]) null);
assertEquals("fumo", name);
// セッターメソッド取得
Method nameSetter = nameProp.getWriteMethod();
nameSetter.invoke(userBean, "kmm");
// or... .invoke(userBean, new Object[]{ "kmm" });
assertEquals("kmm", userBean.getName());
// copyPropertyしてみる
User user1 = new User();
user1.setName("user1");
User user2 = new User();
assertNull("まだnull", user2.getName());
nameSetter.invoke(user2, nameGetter.invoke(user1, (Object[]) null));
assertEquals("コピーされて、同じになるはず", user1.getName(), user2.getName());
}
@Test
public void normalReflection() {
// Bean生成
User user1 = new User();
User user2 = new User();
user1.setName("fumo");
try {
Method nameGetter = User.class.getMethod("getName", (Class<?>[]) null);
Method nameSetter = User.class.getMethod("setName", String.class);
nameSetter.invoke(user2, nameGetter.invoke(user1, (Object[]) null));
assertEquals("コピーされて、同じになるはず", user1.getName(), user2.getName());
} catch (SecurityException e) {
e.printStackTrace();
} catch (NoSuchMethodException e) {
e.printStackTrace();
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment