单元测试 – 使用Mokito模拟Akka Actor的日志对象
发布时间:2020-12-16 18:37:41 所属栏目:安全 来源:网络整理
导读:我已经尝试了一些似乎可以编译但在单元测试期间抛出NullPointer异常的东西,所以我想知道如何可能克服单元测试中的限制.我有一个看起来像这样的课: class LogWriter extends Actor{ def receive{ case x:Timing = log.info(x toString) case x:Event = log.i
我已经尝试了一些似乎可以编译但在单元测试期间抛出NullPointer异常的东西,所以我想知道如何可能克服单元测试中的限制.我有一个看起来像这样的课:
class LogWriter extends Actor{ def receive{ case x:Timing => log.info(x toString) case x:Event => log.info(x toString) case x:Any => log.warning("Improper message sent to LogWriter,%s".format(x toString)) } } 但是尝试使用Specs2和Mockito支持进行单元测试,其中包括以下内容: class LogWriterSpec extends Mokito with Specification{ val mockedLog = mock[Logger] class MockedLogWriter extends LogWriter{ @transient override val log = mockedLog } val writer = actorOf(new MockedLogWriter).start def testTiming = { val message = Timing("testTiming",15 seconds) writer !! (message,400) there was one(mockedLog).info(message toString) } def is = "A LogWriter" ^ "should write a Timing message to log.info" ! testTiming ^ end } 在编译上述NullPointerException的结果时: [akka:event-driven:dispatcher:global-10] ERROR akka.actor.Actor$- Problem java.lang.NullPointerException at akka.util.Logger.warning_$qmark(Logging.scala:43) at akka.util.Logger.warning(Logging.scala:117) 我尝试改变它以使用一些mixin特性,它覆盖了Akka Logging特性的“log”对象,但是编译器不允许它.编译器的回复类似于“我们不希望你犯下无意的错误”.啊!我想要那个“错误”. 有人知道另一种方式吗?我不会坚持Mockito并欢迎任何建议. 解决方法
Scalamock是一个原生的Scala模拟框架(其中包括模拟函数).你可以在这里找到一个完整的例子:
http://www.paulbutcher.com/2011/11/scalamock-step-by-step/ 也许它会解决你的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |