繁体   English   中英

使用 powermock 不调用 scala 中的模拟对象

[英]No calls to mocked object in scala using powermock

我正在尝试在 scala 中使用 power mock。

我想测试的课程

class Operations {
  def write(s: String): Unit = {
     val customWriter = new CustomWriter()
     customWriter.write(s)
  }
}

我想模拟的班级

class CustomWriter {
  def write(s: String): Unit = {
     //do something
  }
}

我的规格文件

import org.junit.runner.RunWith
import org.mockito.Mockito
import org.scalatest.mockito.MockitoSugar.mock
import org.powermock.api.mockito.PowerMockito
import org.powermock.core.classloader.annotations.PrepareForTest
import org.powermock.modules.junit4.PowerMockRunner
import org.scalatest.Matchers._
import org.scalatest.{BeforeAndAfterAll, FunSpec, PrivateMethodTester}

@RunWith(classOf[PowerMockRunner])
@PrepareForTest(Array(classOf[Operations]))
class PowerMockTest extends FunSpec {

  describe("Using power mock") {
    it("check constructor call") {
      val ops = new Operations()
      val mocked = mock[CustomWriter]
      PowerMockito.whenNew(classOf[CustomWriter]).withNoArguments().thenReturn(mocked)
      ops.write("Write Me")
      PowerMockito.verifyNew(classOf[CustomWriter]).withNoArguments()
    }
  }
}

堆栈跟踪如何测试失败

java.lang.AssertionError: Wanted but not invoked customWriter();
Actually, there were zero interactions with this mock.

我什至尝试验证模拟对象上的方法调用,仍然没有运气

Mockito.verify(mocked).write("Write me")

请帮助我了解我在这里缺少什么

看起来您缺少CustomWriter注释中的@PrepareForTest

使用 Powermock 的需要可能表明您做错了什么。 也许您可以改变您的方法,以便您可以使用 Mockito 对其进行测试。

如果您可以控制Operations类,则可以传递CustomWriter实例,而不是在方法内实例化它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM