0

我有一个内部使用 Akka 的 Spring MVC 应用程序。其中一个参与者正在调用已使用 MockRestServiceServer 模拟的 REST 服务。当我运行调用控制器的测试,然后是有趣的参与者时,即使内部抛出了异常,测试也会通过。

我在日志中看到以下异常堆栈跟踪。在测试用例中,我还在验证模拟服务器 (mockRestServiceServer.verify()) 之前放入了 Thread.sleep(5000)。我想知道为什么这个异常没有被抛出到 TestNG 框架并且测试失败。

任何指示或如何解决此问题将不胜感激!谢谢!

java.lang.AssertionError: Request content expected:<"{\"GET\":{\"user\":[\"some user id\"]}}\""> but was:<{"GET":{"user":["some user id"]}}">
at org.springframework.test.util.AssertionErrors.fail(AssertionErrors.java:60) ~[spring-test-3.2.0.RELEASE.jar:3.2.0.RELEASE]
at org.springframework.test.util.AssertionErrors.assertEquals(AssertionErrors.java:89) ~[spring-test-3.2.0.RELEASE.jar:3.2.0.RELEASE]
at org.springframework.test.web.client.match.ContentRequestMatchers$3.match(ContentRequestMatchers.java:94) ~[spring-test-3.2.0.RELEASE.jar:3.2.0.RELEASE]
at org.springframework.test.web.client.RequestMatcherClientHttpRequest.executeInternal(RequestMatcherClientHttpRequest.java:71) ~[spring-test-3.2.0.RELEASE.jar:3.2.0.RELEASE]
at org.springframework.mock.http.client.MockClientHttpRequest.execute(MockClientHttpRequest.java:90) ~[spring-test-3.2.0.RELEASE.jar:3.2.0.RELEASE]
at org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:484) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE]
at org.springframework.web.client.RestTemplate.execute(RestTemplate.java:461) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE]
at org.springframework.web.client.RestTemplate.exchange(RestTemplate.java:410) ~[spring-web-3.2.0.RELEASE.jar:3.2.0.RELEASE]
at com.some.company.akka.actor.adr.service.AdvDataRepoService.generateAndExecuteHttpRequest(AdvDataRepoService.java:118) ~[classes/:na]
at com.some.company.akka.actor.adr.service.AdvDataRepoService.updatePermissions(AdvDataRepoService.java:57) ~[classes/:na]
at com.some.company.akka.actor.adr.AdvDataRepoServiceActor.onReceive(AdvDataRepoServiceActor.java:35) ~[classes/:na]
at akka.actor.UntypedActor$$anonfun$receive$1.applyOrElse(UntypedActor.scala:167) ~[akka-actor_2.10-2.3-M2.jar:2.3-M2]
at akka.actor.Actor$class.aroundReceive(Actor.scala:467) ~[akka-actor_2.10-2.3-M2.jar:2.3-M2]
at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:97) ~[akka-actor_2.10-2.3-M2.jar:2.3-M2]
at akka.actor.ActorCell.receiveMessage(ActorCell.scala:491) [akka-actor_2.10-2.3-M2.jar:2.3-M2]
at akka.actor.ActorCell.invoke(ActorCell.scala:462) [akka-actor_2.10-2.3-M2.jar:2.3-M2]
at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:237) [akka-actor_2.10-2.3-M2.jar:2.3-M2]
at akka.dispatch.Mailbox.run(Mailbox.scala:219) [akka-actor_2.10-2.3-M2.jar:2.3-M2]
at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:385) [akka-actor_2.10-2.3-M2.jar:2.3-M2]
at scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) [scala-library-2.10.3.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) [scala-library-2.10.3.jar:na]
at scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) [scala-library-2.10.3.jar:na]
at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) [scala-library-2.10.3.jar:na]
4

1 回答 1

0

Actor 是异步执行的,在不同的线程上执行,然后是从您向它们发送消息的位置。因此,您无法在发送代码中捕获这些异常。这是设计使然:唯一获得例外的是演员的主管。

于 2014-03-17T08:31:11.767 回答