Tenemos el siguiente escenario:
Mediados de prueba, algunas variables de contexto necesitan ser actualizados. ¿Dónde exactamente en la prueba y qué es exactamente lo que debe suceder es variable. Me gustaría ofrecer una función de "envoltura", que establece algunas variables de contexto y luego realiza todas las afirmaciones que se le da en la llamada de función.
Por lo tanto, algo como lo siguiente:
public void withDefaultContextA(Function<???, Void> noArgsCall) {
setupDefaultContextA();
noArgsCall.invoke() // not sure how apply() would be invoked here
}
o:
public void withContextA(BiFunction<???, Context, Void> providedContextCall) {
setupContext(providedContext); // not sure how apply() would be invoked here
}
Y en la prueba correspondiente, éstos deberían ser invocadas como sigue:
@Test
public void testSomething() {
withDefaultContextA(() -> {
... // do some asserts
}
withContext((new Context(...)) -> {
... // do some asserts
}
}
¿Cómo puedo conseguir esto? Can Java 8 Funciones ser utilizados de esta manera? Si no es así, ¿hay otra manera que puedo lograr esto?
Parece que desea decorar cualquier dado Runnable
(usted utiliza Function
y BiFunction
en su pregunta, pero a medida que regresan Void
y parecen recibir sin argumentos, utilizando Runnable
parece más apropiado aquí).
Puede hacerlo de esta manera:
public static void withDefaultContext(Runnable original) {
setupDefaultContextA();
original.run();
}
A continuación, se puede utilizar el método anterior de la siguiente manera:
withDefaultContext(() -> {
// do some asserts
});
O con un contexto específico:
public static void withContext(Context context, Runnable original) {
setupContext(context);
original.run();
}
Uso:
withContext(new Context(...), () -> {
// do some asserts
});