为了账号安全,请及时绑定邮箱和手机立即绑定

在单元测试中,演员如何处理所有消息?

在单元测试中,演员如何处理所有消息?

呼如林 2023-01-05 16:45:31

我在我们的产品中使用 Akka actor。我们写了一些代码:


   @Singleton

   public class SingletonObj {

      private Map<String, Integer> cached = new HashMap();

      public void set(String key, Integer value) {

         cached.put(key, value);

      }


      public void delete(String key){

         cached.delete(key}

      }

   }


   public class MyActor  extends AbstractActor implements InjectedActorSupport {

       @Inject SingletonObj singletonObj;


        public static Props props(Injector injector) {

        return Props.create(MyActor.class, injector);

    }


    public MyActor(Injector injector) {

        this.injector = injector;

        receive(ReceiveBuilder.create()

            .match(AddEvent.class, this::addEvent)

            .match(DeteteEvent.class, this::deleteEvent))

            .build());

        }

        private void addEvent(AddEvent addEvent) {singletonObj.set(addEvent.key, addEvent.value);}


        private void deteleEvent(DeteteEvent event){singletonObj.detele(event.key);}

   }


   public class Controller {


       private Injector injector;

       private ActorSystem actorSystem;


       public void handleAdd()...


       public void handleDelete()...



   }


然后当我junit为这些课程写一些测试时


   @Test public void testMethod(){

       sendAddRequest(...);

       sendDeteleRequest(...)

       ...

       ...


       assertThat(singletonObj.get("someString")).isEqual(42)

    }

那么这个测试是不可靠的,因为当我断言时,所有事件都没有被处理。


我如何等待 actor 系统中的所有事件完成?


查看完整描述

1 回答

?
神不在的星期二

TA贡献1699条经验 获得超6个赞

导入下面的包,然后你可以等待直到你处理完所有事件,否则测试将在超时后失败。


testCompile 'org.awaitility:awaitility:3.1.0'


import org.awaitility.Awaitility;

在你使用 assertThat 之前


await().pollInterval(5, TimeUnit.MILLISECONDS).until(() -> !isProcessed());

isProcessed 方法如下所示


protected Callable<Boolean> isProcessed() {

        return () -> {

            return singletonObj.getCacheCount()==2;

        };

    }



查看完整回答
反对 回复 2023-01-05

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信