java - 使用ScalaTest测试包含@Autowired和私有(private)字段的java

标签 java scala mockito private scalatest

我已经开始使用 ScalaTest 来测试我的 Java 代码,并且我喜欢它(我读过《Testing in Scala》一书)。

最近我一直在尝试测试一些 java Spring 代码,其中包含标记为 private@Autowired 的字段。这些字段没有 setter 方法。

我意识到我可以使用注释 @InjectMocks@Mock 使用 JUnit + Mockito 轻松测试它们,但是,我想使用 ScalaTest 和 a 来测试它们模拟框架(例如 Mockito 或 ScalaMock)。

我的问题:Scalatest + Mockito 是否可以用于模拟私有(private)字段,或者这些框架是否要求我的 java 类具有为我的 private 定义的 public setter 方法@Autowired 字段?

最佳答案

您可以使用 InjectMocks 来做到这一点。下面是一个使用 ScalaTest 和 Mockito 来测试包含 @Autowired 成员的类的工作示例:

import org.mockito.{MockitoAnnotations, InjectMocks, Mock}
import org.scalatest.{FunSpec, BeforeAndAfter}
import org.scalatest.Matchers._
import org.mockito.Mockito._
import org.springframework.beans.factory.annotation.Autowired

class InjectMocksSpec extends FunSpec with BeforeAndAfter {

  @Mock
  var paramMock: MockedClass = null

  @InjectMocks
  var testClass = new TestClass()

  describe("InjectMocks") {
    it("should inject mock for Autowired field") {
      MockitoAnnotations.initMocks(this)

      when(paramMock.get).thenReturn("bar")

      testClass.test should be("bar")

      verify(paramMock, times(1)).get
    }
  }

}

class MockedClass {
  def get: String = {
    "foo"
  }
}

class TestClass {
  @Autowired
  var param: MockedClass = null

  def test: String = {
    param.get
  }
}

关于java - 使用ScalaTest测试包含@Autowired和私有(private)字段的java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30242674/

相关文章:

java - 使用 Mockito/Powermock 框架模拟最终私有(private)变量

java - 水平翻转 (X) ParticleEffect [Libgdx]

scala - 如何在 Scala 中具体化两个类次的重置?

java - 直接从子类模拟抽象父类(super class)方法

java - 无法使用 scala 参数化类型覆盖 java 泛型函数

scala - 使用 Flink 计算流中有状态实体的最新状态

java - PowerMockito.doReturn 返回 null

java - 如何将调用对象方法的 JSP servlet 转换为 JSTL?

java - 在 OCR(光学字符识别)之前,您会推荐什么软件进行图像增强?

java - 将 log4j 版本更新到 1.1.5 后未创建日志文件