在我们做接口测试的时候通常会验证返回的实体类中的空字段。 但是如果一个个字段的assertNotNull,不仅影响其准确性,而且会延长编码时间和调试时间。
这里介绍一个小工具,它可以把我们频繁的assertNotNull 转变成一句话,实现更强大的功能。 希望大家可以提出宝贵意见哦!!
方法如下:
public static String assertGetMethod(Object objectClass) {
String str = "";
Object[] args = new Object[0];
Class itemClass = objectClass.getClass();
Method[] methods = itemClass.getMethods();
for (Method method : methods) {
if (method.getName().startsWith("get")) {
try {
Object oa = method.invoke(objectClass, args);
if (null != oa) {
System.out.println(method.getName() + ":"
+ oa.toString());
}else{
str+=method.getName().substring(3, method.getName().length())+ ",";
}
} catch (IllegalArgumentException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InvocationTargetException e) {
e.printStackTrace();
}
}
}
return ("".equals(str)) ? null : (str.substring(0,str.length()-1));
}
这个工具是用反射法实现的,具体的实现我就不说了。主要介绍一下用法吧。
举个例子好了。
例如,这里有一个类 A
public class A {
String a;
String b;
String c;
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public String getC() {
return c;
}
public void setC(String c) {
this.c = c;
}
}
-----------------------------------------------------------------
工具说明:
public static void main(String[] args) {
A a = new A();
System.out.println(assertGetMethod(b));
}
打印出: A,B (为空的方法名)
public static void main(String[] args) {
A b = new A();
b.setA("a");
b.setB("b");
b.setC("c");
System.out.println(assertGetMethod(b));
}
打印出: null
-----------------------------------------------------------------
使用说明:
我们验证的时候,如果要求所有的字段不能为空。 那么只要:
Assert.assertNull(
“以下字段值为空:n” +assertGetMethod(b)”,
assertGetMethod(b)
);
如果要求个别值可以为空(如B 和C可以为空),那么只要:
public static void main(String[] args) {
A a = new A();
a.setA("a");
String[] nullNames = assertGetMethod(a).split(",");
String validName="";
for (String string : nullNames) {
if(!string.equals("B")
&& !string.equals("C")){
validName = string + ",";
}
}
Assert.assertNull(
“以下字段值为空:n” + validName”,
validName
);
}