我已经开始使用 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/