Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unit testing 用莫基托模仿阿克卡演员';s日志对象_Unit Testing_Scala_Mockito_Akka_Actor - Fatal编程技术网

Unit testing 用莫基托模仿阿克卡演员';s日志对象

Unit testing 用莫基托模仿阿克卡演员';s日志对象,unit-testing,scala,mockito,akka,actor,Unit Testing,Scala,Mockito,Akka,Actor,我尝试了一些似乎可以编译但在单元测试期间抛出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("Improp

我尝试了一些似乎可以编译但在单元测试期间抛出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 trait,它覆盖了Akka
Logging
trait的“log”对象,但编译器不允许这样做。编译器的回答是“我们不希望你犯一个不经意的错误。”啊!我想要那个“错误”

有人知道另一种方法吗?我并不拘泥于Mockito,欢迎任何建议。

是一个原生的Scala模拟框架(其中包括允许模拟功能)。您可以在此处找到完整的示例:

也许它会解决你的问题