EDITAR: Siguiendo el lanzamiento de JUnit 4.11, ahora puede anotar un método con @Rule
.
Lo utilizará como:
private TemporaryFolder folder = new TemporaryFolder();
@Rule
public TemporaryFolder getFolder() {
return folder;
}
Para versiones anteriores de JUnit, ver la respuesta a continuación.
-
No, no se puede utilizar directamente desde esta Scala. El campo debe ser público y no estático. De org.junit.Rule:
public @interface Rule: Annotates fields that contain rules. Such a field must be public, not static, and a subtype of TestRule.
No se puede declarar un ámbito público en Scala. Todos los campos son privados y accesibles por los usuarios. Vea la respuesta a este question.
Además de esto, ya existe una solicitud de mejora de JUnit (todavía abierto):
Extend rules to support @Rule public MethodRule someRule() { return new SomeRule(); }
La otra opción es que se permita a la que Campos no públicos, pero esto ya ha sido rechazada : Allow @Rule annotation on non-public fields.
Así que sus opciones son:
- junit clon, y poner en práctica la primera sugerencia, el método, y presentar una solicitud de extracción
- Ampliación de la clase Scala de una clase Java que implementa el @Rule
-
public class ExpectedExceptionTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
}
y luego heredando de que:
class ExceptionsHappen extends ExpectedExceptionTest {
@Test
def badInt: Unit = {
thrown.expect(classOf[NumberFormatException])
Integer.parseInt("one")
}
}
que funciona correctamente.
Para mayor claridad: que (ahora) trabaja en Scala (pero sólo con el método: '@Rule def MyRule =' ... y no con atributos tales como '@ Regla val myRule = ... ') –