我正在为我的代码的一些异步部分(返回Future
s)编写单元测试,这也涉及到模拟 Scala 对象的需要。按照这些文档,我可以成功地模拟对象的功能。我的问题源于return ,其中 scalatest 中的异步测试需要withObjectMocked[FooObject.type]
返回or 。为了解决这个问题,我在我的测试中创建了 s,我在发送到的函数中重新分配,最终看起来像这样:Unit
Assertion
Future[Assertion]
var
withObjectMocked[FooObject.type]
class SomeTest extends AsyncWordSpec with Matchers with AsyncMockitoSugar with ResetMocksAfterEachAsyncTest {
"wish i didn't need a temp var" in {
var ret: Future[Assertion] = Future.failed(new Exception("this should be something")) // <-- note the need to create the temp var
withObjectMocked[SomeObject.type] {
when(SomeObject.someFunction(any)) thenReturn Left(Error("not found"))
val mockDependency = mock[SomeDependency]
val testClass = ClassBeingTested(mockDependency)
ret = testClass.giveMeAFuture("test_id") map { r =>
r should equal(Error("not found"))
} // <-- set the real Future[Assertion] value here
}
ret // <-- finally, explicitly return the Future
}
}
那么我的问题是,是否有更好/更干净/更惯用的方法来编写模拟对象的异步测试,而无需跳过这一圈?出于某种原因,我认为使用AsyncMockitoSugar
而不是MockitoSugar
会为我解决这个问题,但withObjectMocked
仍然返回Unit
。这可能是一个错误和/或功能请求的候选者(withObjectMocked
返回功能块值的异步版本,而不是Unit
)?还是我错过了如何完成此类任务?