org.mockito.internal.junit.util.JUnitFailureHacker Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of securemock Show documentation
Show all versions of securemock Show documentation
Libraries for Elasticsearch
The newest version!
/*
* Copyright (c) 2007 Mockito contributors
* This program is made available under the terms of the MIT License.
*/
package org.mockito.internal.junit.util;
import java.lang.reflect.Field;
import org.junit.runner.notification.Failure;
import org.mockito.internal.exceptions.ExceptionIncludingMockitoWarnings;
@Deprecated
public class JUnitFailureHacker {
public void appendWarnings(Failure failure, String warnings) {
if (isEmpty(warnings)) {
return;
}
//TODO: this has to protect the use in case jUnit changes and this internal state logic fails
Throwable throwable = (Throwable) getInternalState(failure, "fThrownException");
String newMessage = "contains both: actual test failure *and* Mockito warnings.\n" +
warnings + "\n *** The actual failure is because of: ***\n";
ExceptionIncludingMockitoWarnings e = new ExceptionIncludingMockitoWarnings(newMessage, throwable);
e.setStackTrace(throwable.getStackTrace());
setInternalState(failure, "fThrownException", e);
}
private boolean isEmpty(String warnings) {
return warnings == null || "".equals(warnings); // isEmpty() is in JDK 6+
}
private static Object getInternalState(Object target, String field) {
Class> c = target.getClass();
try {
Field f = getFieldFromHierarchy(c, field);
f.setAccessible(true);
return f.get(target);
} catch (Exception e) {
throw new RuntimeException("Unable to get internal state on a private field. Please report to mockito mailing list.", e);
}
}
private static void setInternalState(Object target, String field, Object value) {
Class> c = target.getClass();
try {
Field f = getFieldFromHierarchy(c, field);
f.setAccessible(true);
f.set(target, value);
} catch (Exception e) {
throw new RuntimeException("Unable to set internal state on a private field. Please report to mockito mailing list.", e);
}
}
private static Field getFieldFromHierarchy(Class> clazz, String field) {
Field f = getField(clazz, field);
while (f == null && clazz != Object.class) {
clazz = clazz.getSuperclass();
f = getField(clazz, field);
}
if (f == null) {
throw new RuntimeException(
"You want me to get this field: '" + field +
"' on this class: '" + clazz.getSimpleName() +
"' but this field is not declared within the hierarchy of this class!");
}
return f;
}
private static Field getField(Class> clazz, String field) {
try {
return clazz.getDeclaredField(field);
} catch (NoSuchFieldException e) {
return null;
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy