使用Akka(与Java一起使用)如何验证我的被测参与者正在观看另一个参与者?
我想为以下参与者创建单元测试,以验证以下行为:使用Akka(与Java一起使用)如何验证我的被测参与者正在观看另一个参与者?,java,unit-testing,akka,Java,Unit Testing,Akka,我想为以下参与者创建单元测试,以验证以下行为: ListeningActor正确注册自身以观看listeningToactor ListeningActor当listeningToactor终止时,正确地自杀 如何验证这两种行为 我将Akka 2.0.2与Java一起使用 谢谢 公共类ListingActor扩展了UntypedActor{ 私人最终执行人,如收听者; 公众参与人(最终参与人){ this.listengto=listengto; } @凌驾 公共无效预启动(){ super.p
ListeningActor
正确注册自身以观看listeningTo
actorListeningActor
当listeningTo
actor终止时,正确地自杀公共类ListingActor扩展了UntypedActor{
私人最终执行人,如收听者;
公众参与人(最终参与人){
this.listengto=listengto;
}
@凌驾
公共无效预启动(){
super.preStart();
context().watch(listeningTo);//免责声明:我对akka不熟悉
您可以为ActorRef创建子类吗?如果可以,您可以创建一个专门用于测试的子类,该子类可以导致发送消息并被终止。然后,在单元测试中,告诉您的ListeningActor实例被终止,并验证您的ListeningActor实例是否已停止。从TestKit中使用testActor查看ListengGenerator,然后,当您毒杀或阻止它所收听的演员时,ListGenerator将被终止。完成。如果它对任何人都有帮助,下面是我的最后一个单元测试:
public class ListeningActorTest
{
private TestKit testKit;
private TestActorRef<ListeningActor> listeningActor;
private TestProbe listeningToActor;
@Before
public void setUp() throws Exception
{
testKit = new TestKit(ActorSystem.apply());
listeningToActor = TestProbe.apply(testKit.system());
listeningActor = TestActorRef.apply(new Props(new UntypedActorFactory()
{
@Override
public Actor create()
{
return new ListeningActor(listeningToActor.ref());
}
}), testKit.system());
}
@Test
public void shouldTerminateWhenTheListeningToActorTerminates()
{
//Given
assertFalse(listeningActor.isTerminated());
//When
listeningToActor.testActor().tell(PoisonPill.getInstance());
//Then
assertTrue(listeningActor.isTerminated());
}
}
公共类ListingActorTest
{
私人测试套件;
私人遗嘱执行人;
私有TestProbe ListingToActor;
@以前
public void setUp()引发异常
{
testKit=新的testKit(ActorSystem.apply());
listingToActor=TestProbe.apply(testKit.system());
listeningActor=TestActorRef.apply(新的Props(新的非类型dactorfactory)()
{
@凌驾
公共参与者创建()
{
返回新的ListingActor(ListingToActor.ref());
}
}),testKit.system());
}
@试验
当ListeningToActor终止()时,公共无效应终止
{
//给定
assertFalse(listingActor.isTerminated());
//什么时候
ListingToActor.testActor().tell(toxingPill.getInstance());
//然后
assertTrue(ListingActor.isTerminated());
}
}
如果您使用的是JavaTestKit和akka 2.4.2版,您可以这样解决:
@Test
public void testThatPersistenceActorShutdown() {
watch(persistenceActor);
persistenceActor.tell(new Shutdown(), getRef());
expectTerminated(persistenceActor);
}
您可以在这里找到一个工作示例-谢谢Eric。我实际上希望使用包含Akka测试工具包的解决方案。我希望确保context().watch()
和context().stop())
方法被正确调用。谢谢,这比我想象的要简单。它捕获了一个错误-if条件应该被写成if(terminated.actor().equals(listingto))