gpt4 book ai didi

unit-testing - 使用 Mockito 模拟 Akka Actor 日志对象

转载 作者:行者123 更新时间:2023-12-04 20:20:54 25 4
gpt4 key购买 nike

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

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)

我尝试将其更改为使用一些混合特性,该特性覆盖了 Akka Logging 的“日志”对象。 trait 但编译器不允许。编译器的回复是“我们不希望你犯无意的错误”。啊!我想要那个“错误”。

有人知道另一种方式吗?我不坚持 Mockito,欢迎任何建议。

最佳答案

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

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

也许它会解决你的问题。

关于unit-testing - 使用 Mockito 模拟 Akka Actor 日志对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6762788/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com