EDIT: Sau khi phát hành JUnit 4.11, bây giờ bạn có thể chú thích một phương thức với @Rule
.
Bạn sẽ sử dụng nó như:
private TemporaryFolder folder = new TemporaryFolder();
@Rule
public TemporaryFolder getFolder() {
return folder;
}
Đối với phiên bản trước của JUnit, xem câu trả lời dưới đây.
-
Không, bạn không thể sử dụng trực tiếp từ Scala. Trường cần phải công khai và không tĩnh. Từ org.junit.Rule:
public @interface Rule: Annotates fields that contain rules. Such a field must be public, not static, and a subtype of TestRule.
Bạn không thể tuyên bố một lĩnh vực nào trong Scala. Tất cả các trường là riêng tư và có thể truy cập được bởi người truy cập. Xem câu trả lời cho số này question.
Cũng vì điều này, đã có một yêu cầu tăng cường cho junit (vẫn mở):
Extend rules to support @Rule public MethodRule someRule() { return new SomeRule(); }
Các tùy chọn khác là nó lĩnh vực ngoài công lập được phép, nhưng điều này đã bị từ chối : Allow @Rule annotation on non-public fields.
Vì vậy, lựa chọn của bạn là:
- bản sao junit, và thực hiện các đề nghị đầu tiên, phương pháp, và gửi một yêu cầu kéo
- Mở rộng lớp Scala từ một lớp java mà thực hiện các @Rule
-
public class ExpectedExceptionTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
}
và sau đó kế thừa từ rằng:
class ExceptionsHappen extends ExpectedExceptionTest {
@Test
def badInt: Unit = {
thrown.expect(classOf[NumberFormatException])
Integer.parseInt("one")
}
}
hoạt động chính xác.
Nguồn
2011-09-08 23:10:18
Để rõ ràng: nó (bây giờ) hoạt động trên scala (nhưng chỉ với phương pháp: '@Rule def myRule = ...' và không có thuộc tính như '@ Quy tắc val myRule = ... ') –