EDYCJA: Po wydaniu JUnit 4.11 można teraz dodawać adnotacje do metody za pomocą @Rule
.
będzie go używać jak:
private TemporaryFolder folder = new TemporaryFolder();
@Rule
public TemporaryFolder getFolder() {
return folder;
}
We wcześniejszych wersjach JUnit, patrz poniższa odpowiedź.
-
Nie, nie można używać tego bezpośrednio od Scala. Pole musi być publiczne i niestatyczne. Od org.junit.Rule:
public @interface Rule: Annotates fields that contain rules. Such a field must be public, not static, and a subtype of TestRule.
Nie można zadeklarować publicznych pól w Scala. Wszystkie pola są prywatne i udostępniane przez akcesorów. Zobacz odpowiedź na tę question.
Poza tym, nie jest już wniosek wzmocnienie dla JUnit (ciągle otwarty):
Extend rules to support @Rule public MethodRule someRule() { return new SomeRule(); }
Inną opcją jest to, że pola niepubliczne być dozwolone, ale to już zostało odrzucone : Allow @Rule annotation on non-public fields.
więc opcje są:
- klon JUnit i wdrożenia pierwszego sugestię, metody i złożyć wniosek ściągania
- rozszerzenie klasy Scala z klasy Java, który implementuje @Rule
-
public class ExpectedExceptionTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
}
i dziedziczy że:
class ExceptionsHappen extends ExpectedExceptionTest {
@Test
def badInt: Unit = {
thrown.expect(classOf[NumberFormatException])
Integer.parseInt("one")
}
}
który działa poprawnie.
Dla jasności: to (teraz) działa na Scala (ale tylko z metody: '@Rule def myRule = ...' a nie z atrybutem takiego jak '@ Reguła warta myRule = ... ') –