2011-05-11 9 views
6

Điều duy nhất tôi đã thấy cho đến nay là ai đó đăng một ví dụ về thử nghiệm một TypedActor. Tôi lấy nó không có cách nào để thử nghiệm một UntypedActor thông qua nói Junit? Tài liệu Akka ngày càng trở nên tốt hơn, nhưng tôi không thấy thử nghiệm được đề cập. Có thực sự rõ ràng và tôi chỉ thiếu một cái gì đó?Làm cách nào để kiểm tra Diễn viên trong Java?

+1

Sửa lỗi nếu tôi sai nhưng bạn sẽ không cần phải thử nghiệm một diễn viên trực tiếp nếu tất cả điều đó xảy ra là gọi phương thức trên lớp khác thực hiện logic: MyActor mở rộng UntypedACtor {onCall (Object o) {new MyBusinessRule() .do(); }} Vì vậy, bằng cách kiểm tra diễn viên bạn sẽ thử AKKA chứ không phải là logic của bạn. – Eldelshell

Trả lời

5

Để thử nghiệm với JUnit bạn sẽ cần phải sử dụng các cơ sở cung cấp bởi JUnit, các tài liệu về thử nghiệm Diễn viên (Java equiv là UntypedActor) là ở đây: http://akka.io/docs/akka/snapshot/scala/testing.html

+0

Tính năng này có hoạt động với Java không? Tôi đã thử, nhưng tôi dường như không thể tìm ra cách sử dụng với Java. – chaostheory

+0

Không, nó không hoạt động với Java. Nếu bạn cần sử dụng JUnit thì bạn sẽ cần phải sử dụng API JUnit. –

1

Có thể, ít nhất là với phiên bản 1.3 và 2.0 và thư viện akka-testkit.

Bạn làm một cái gì đó như thế này để thiết lập diễn viên của bạn:

@Before 
public void initActor() { 
    actorSystem = ActorSystem.apply(); 
    actorRef = TestActorRef.apply(new AbstractFunction0() { 

     @Override 
     public Pi.Worker apply() { 
      return new Pi.Worker(); 
     } 

    }, actorSystem); 
} 

Sau đó bạn có thể sử dụng lớp TestProbe để kiểm tra diễn viên của mình (cho phiên bản 1.3 nó là hơi khác nhau):

@Test 
public void calculatePiFor0() { 
    TestProbe testProbe = TestProbe.apply(actorSystem); 
    Pi.Work work = new Pi.Work(0, 0);   
    actorRef.tell(work, testProbe.ref()); 

    testProbe.expectMsgClass(Pi.Result.class);  
    TestActor.Message message = testProbe.lastMessage(); 
    Pi.Result resultMsg = (Pi.Result) message.msg(); 
    assertEquals(0.0, resultMsg.getValue(), 0.0000000001); 
} 

Có có sẵn trong một blogpost tôi đã viết trên một số trải nghiệm của tôi: http://fhopf.blogspot.com/2012/03/testing-akka-actors-from-java.html

1

Bạn có thể quan tâm đến bài đăng trên blog mà tôi đã viết: Testing AKKA actors with Mockito and FEST-Reflect Ví dụ tôi đang sử dụng dựa trên JUnit, Mockito và FEST-Reflect. Hãy cho tôi biết nếu điều đó có ích cho bạn.