首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Mokito模拟Akka Actor的日志对象

使用Mokito模拟Akka Actor的日志对象
EN

Stack Overflow用户
提问于 2011-07-20 21:31:24
回答 1查看 1.3K关注 0票数 5

我尝试了一些似乎可以编译但在单元测试期间抛出NullPointer异常的东西,所以我想知道如何才能克服单元测试中的限制。我有一个类,看起来像这样:

代码语言:javascript
复制
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支持进行单元测试,其内容大致如下:

代码语言:javascript
复制
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中的结果时

代码语言:javascript
复制
[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)

我尝试将其更改为使用某个混合特征,该特征覆盖了Akka日志特征的“Logging”对象,但编译器不允许这样做。编译器的回复大致是这样的:“我们不希望您无意中犯下错误。”啊!我想要那个“错误”

有谁知道另一种方法吗?我不坚持使用Mockito,欢迎任何建议。

EN

回答 1

Stack Overflow用户

发布于 2011-07-20 22:17:17

Scalamock是一个原生的Scala模拟框架(在其他框架中,它允许模拟函数)。你可以在这里找到一个完整的例子:

http://www.paulbutcher.com/2011/11/scalamock-step-by-step/

也许它会解决你的问题。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6762788

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档