РЕДАКТИРОВАТЬ: После выпуска JUnit 4.11 вы можете аннотировать метод с помощью @Rule
.
. Вы будете использовать его следующим образом:
private TemporaryFolder folder = new TemporaryFolder();
@Rule
public TemporaryFolder getFolder() {
return folder;
}
Для более ранних версий JUnit:см. ответ ниже.
-
Нет, вы не можете использовать это напрямую из Scala.Поле должно быть общедоступным и нестатичным.От org.junit.Rule :
public @interface Rule: Annotates fields that contain rules. Such a field must be public, not static, and a subtype of TestRule.
Вы не можете объявить открытые поля в Scala.Все поля являются частными и доступны для доступа.См. Ответ на этот вопрос .
. Кроме того, уже существует запрос на улучшение для junit (все еще открыт):
Расширение правил для поддержки@Rule public MethodRule someRule () {вернуть новое SomeRule ();}
Другой вариант - разрешить закрытые поля, но это уже было отклонено: Разрешить аннотацию @Rule для закрытых полей .
Итак, вы можете выбрать:
- clone junit и реализовать первое предложение, метод и отправить запрос на извлечение
- Расширить класс Scala из класса java, который реализует@Rule
-
public class ExpectedExceptionTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
}
и последующее наследование от этого:
class ExceptionsHappen extends ExpectedExceptionTest {
@Test
def badInt: Unit = {
thrown.expect(classOf[NumberFormatException])
Integer.parseInt("one")
}
}
, который работает правильно.