다중 프로젝트 메이븐 프로젝트가 있습니다. xsd를 사용하여 jaxb에 의해 생성 된 클래스 집합입니다. 이러한 클래스의 예가 아래에 나와 있습니다. (getter 및 setter 제외)execuete jacoco가 에이전트를 준비 할 때 리플렉션을 사용한 Java 주석 캡쳐가 작동하지 않습니다.
@XmlRootElement(name = "IPPAMUser")
public class IPPAMUser {
@XmlElement(name = "UserName", required = true)
protected String userName;
@XmlElement(name = "PAMInstanceID", required = true)
protected String pamInstanceID;
@XmlElement(name = "Product", required = true)
protected String product;
@XmlElement(name = "Password", required = true)
protected String password;
@XmlElement(name = "PasswordAlogo", required = true)
protected String passwordAlogo;
@XmlElement(name = "LastUpdatedOn", required = true)
protected String lastUpdatedOn;
@XmlElement(name = "IsGenerated")
protected boolean isGenerated;
@XmlElement(name = "LastNotifiedOn", required = true)
protected String lastNotifiedOn;
}
하나의 모듈에서 키 값 쌍이 필요합니다. 따라서 한 가지 방법은 리플렉션을 사용하여 키 값 쌍 목록으로 변환하는 방법으로 작성되었습니다. 이 필드의 이름에서 값으로 키와 값으로 사용됩니다. 그것은 다음과 같이 취해집니다.
Field[] fields = t.getClass().getDeclaredFields();
for(Field field : fields) {
Annotation anotation = field.getAnnotation(XmlElement.class);
XmlElement xmlElement = (XmlElement) anotation;
String methodName;
String parameterValue = "";
if(field.getType() == boolean.class){
methodName = "is" + xmlElement.name();
} else {
methodName = "get" + xmlElement.name();
}
try {
Method method = t.getClass().getDeclaredMethod(methodName);
if(method.invoke(t) == null){
continue;
}
parameterValue = method.invoke(t).toString();
} catch (NoSuchMethodException e) {
log.error("Method not found. Method : " + methodName, e);
log.error("Stack trace : {}", AuthUtils.getPrintableStackTrace(e));
} catch (InvocationTargetException e) {
log.error("Method invoking failed. Method : " + methodName, e);
log.error("Stack trace : {}", AuthUtils.getPrintableStackTrace(e));
} catch (IllegalAccessException e) {
log.error("Illegal access " + e);
log.error("Stack trace : {}", AuthUtils.getPrintableStackTrace(e));
}
}
이 변환을 사용하는 몇 가지 테스트 사례가 있습니다. 그들은 잘 작동하고 메이븐 빌드와 함께 실행됩니다. 코드 커버리지를 취하기 위해 jacoco-maven-plugin이 추가되었습니다. 실행 중에는 jacoco.exec 파일이 생성되지 않습니다. 이에 따르면 post 실행 목표가 pom 파일에 추가됩니다. 그 후 내 유닛 테스트가 실패하여 널 포인터 예외가 발생합니다. 스택 추적에 따르면 "xmlElement.name()"을 실행할 때 발생합니다. 이는 xmlElement가 null임을 의미합니다. 따라서 리플렉션은이 실행 목표를 추가 한 후에 주석을 얻을 수 없습니다.
어떻게이 문제를 해결하고 jacoco 또는 다른 방법을 사용하여 코드 커버리지 보고서를 얻을 수 있습니까?
미리 감사드립니다.