2013-06-05 34 views
19

Các Akka Testing docs cung cấp cho các cách sau để tạo ra một TestActorRef:Làm cách nào để tạo một TestActorRef trong Scala cho một Actor với các tham số hàm tạo?

 
import akka.testkit.TestActorRef 

val actorRef = TestActorRef[MyActor] 

Làm thế nào để mở rộng này để thử nghiệm một diễn viên hiện có mà lấy đối số nhà xây dựng? Khi tôi cố gắng chạy này như là, thay thế trong lớp diễn viên của tôi, tôi nhận được lỗi sau:

"lỗi trong khi tạo diễn viên akka.actor.ActorInitializationException: Không thể khởi tạo diễn viên
Hãy chắc chắn rằng diễn viên là không được định nghĩa bên trong một lớp/đặc điểm,
nếu đặt nó bên ngoài lớp/đặc điểm, fe trong đối tượng đồng hành,
HOẶC cố gắng thay đổi: 'actorOf (Đạo cụ [MyActor]' thành 'actorOf (Đạo cụ (new MyActor)'. "

Các ý tưởng khác nhau mà tôi có thể nghĩ ra để thêm args sau tên lớp bên trong dấu ngoặc vuông tất cả bị lỗi và ghi đè .

Trả lời

24

Bạn có thể sử dụng Props như thế này:

val actorRef = TestActorRef(Props(new MyActor(param1, param2))) 

Hoặc nhà máy phương pháp như thế này:

val actorRef = TestActorRef(new MyActor(param1, param2)) 

Xem apply phương pháp trong đối tượng TestActorRef.

+2

Xin cảm ơn, điều đó có tác dụng. Tôi đã thêm một khai báo kiểu vào val: 'val actorRef: TestActorRef [MyActor] = TestActorRef (Đạo cụ (new MyActor (param1, param2)))' và bây giờ tôi có thể truy cập nó một cách rõ ràng. – David

+0

Điều này dường như không hoạt động nữa. Hoặc ít nhất là không làm việc cho một diễn viên được khai báo bên trong một lớp thử nghiệm. – davidrpugh

+0

@davidrpugh: nó hoạt động tốt cho tôi [xem này] (http://pastebin.com/zxFHKTj0) – senia