Skip to content

Instantly share code, notes, and snippets.

@jleskovar
Last active August 29, 2015 14:15
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jleskovar/4349e070cb4fd7523ed3 to your computer and use it in GitHub Desktop.
Save jleskovar/4349e070cb4fd7523ed3 to your computer and use it in GitHub Desktop.
replayAll/verifyAll/resetAll in Java 8
package org.github.jleskovar;
import org.easymock.Mock;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.stream.Stream;
import static org.easymock.EasyMock.*;
/**
* Created by James on 14/02/2015.
*/
public interface EasyMockSupport2 {
default void replayAll() {
replay(getMocksFromHostClass());
}
default void verifyAll() {
verify(getMocksFromHostClass());
}
default void resetAll() {
reset(getMocksFromHostClass());
}
default Object[] getMocksFromHostClass() {
return Arrays.stream(getAncestorClasses(this.getClass()))
.flatMap(this::getMocksFromGivenClass)
.filter(Objects::nonNull)
.toArray();
}
default Class[] getAncestorClasses(Class<?> clazz) {
List<Class<?>> clazzes = new ArrayList<>();
Class<?> next = clazz;
do {
clazzes.add(next);
next = next.getSuperclass();
} while (next != null && next != Object.class);
return clazzes.toArray(new Class[clazzes.size()]);
}
default Stream<Object> getMocksFromGivenClass(Class<?> clazz) {
return Arrays.stream(clazz.getDeclaredFields())
.filter(f -> f.getAnnotation(Mock.class) != null)
.flatMap(this::getField);
}
default Stream<Object> getField(Field f) {
try {
f.setAccessible(true);
return Stream.of(f.get(this));
} catch (IllegalAccessException e) {
e.printStackTrace();
return Stream.empty();
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment