編輯:繼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中的一個公共領域。所有字段都是私有的,並且可以通過訪問者訪問。請參閱question的答案。
除了這一點,也已經是JUnit的一個增強請求(仍處於打開狀態):
Extend rules to support @Rule public MethodRule someRule() { return new SomeRule(); }
另一種選擇是,非公有制領域是允許的,但是這已經被拒絕:Allow @Rule annotation on non-public fields。
那麼你的選擇是:
- 克隆JUnit和實施的第一個建議,方法,並提交pull請求
- 從實現的@rule java類擴展斯卡拉類
-
public class ExpectedExceptionTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
}
,然後從該繼承:
class ExceptionsHappen extends ExpectedExceptionTest {
@Test
def badInt: Unit = {
thrown.expect(classOf[NumberFormatException])
Integer.parseInt("one")
}
}
它能正常工作。
爲清楚:它(現在)的作品在斯卡拉(但只方法:'@rule高清MyRule的= ...'不帶屬性,如'@規則val myRule = ...') –