【发布时间】:2014-07-03 14:54:11
【问题描述】:
我是 Scala 的新手。目前我正在接受训练以实现特征的模拟测试。有人可以帮我实施吗?我想在特征SeasonalityServiceImpl 和测试方法hMock.doSomeForF() 中模拟方法seasonalityDao.doSomeForB 和seasonalityDao.doSomeForB1。
更新: 我已经根据下面的 cmets 更正了代码。在这种情况下,当我尝试验证模拟方法 verify(sMock).doSomeForB() verify(sMock).doSomeForB1() 时,我收到下一个错误: 需要但未调用: 季节性道.doSomeForB(); -> 在 Main$$anonfun$1.apply$mcV$sp(Main.scala:12) 实际上,与此模拟的交互为零。
这是一个代码(我只是简化了项目的重要部分作为示例):
import org.scalatest._
import org.mockito.Mockito._
class Main extends FunSuite with SeasonalityServiceComponentImpl with SeasonalityDaoComponent {
test("some test") {
def hMock = mock(classOf[SeasonalityServiceImpl])
def sMock = mock(classOf[SeasonalityDao])
when(sMock.doSomeForB()).thenReturn(Option(2))
when(sMock.doSomeForB1()).thenReturn(10)
verify(sMock).doSomeForB()
verify(sMock).doSomeForB1()
println("With Option " + hMock.doSomeForF())
println("Without Option " + hMock.doSomeForF1())
}
override def seasonalityDao: SeasonalityDao = mock(classOf[SeasonalityDao])
override def seasonalityService: SeasonalityService = mock(classOf[SeasonalityService])
}
trait SeasonalityDaoComponent {
def seasonalityDao: SeasonalityDao
trait SeasonalityDao {
def doSomeForB(): Option[Int]
def doSomeForB1(): Int
}
}
trait SeasonalityServiceComponent {
def seasonalityService: SeasonalityService
trait SeasonalityService {
def doSomeForF(): Option[Int]
def doSomeForF1(): Int
}
}
trait SeasonalityServiceComponentImpl extends SeasonalityServiceComponent {
this: SeasonalityDaoComponent =>
trait SeasonalityServiceImpl extends SeasonalityService {
def doSomeForF(): Option[Int] = {
seasonalityDao.doSomeForB()
}
def doSomeForF1(): Int = {
seasonalityDao.doSomeForB1()
}
}
}
【问题讨论】:
-
问题到底是什么?
-
如何正确实施 SeasonalityServiceImpl 的模拟测试?在这种情况下,我收到消息:无法模拟/监视类 Main$$anon$1 Mockito 无法模拟/监视以下内容:-最终类-匿名类-原始类型 org.mockito.exceptions.base.MockitoException:...
-
您应该编辑问题并添加这些错误。人们将更有可能回答。至于问题本身,请使用
classOf[SeasonalityService]而不是seasonality.getClass。这将使用接口,而不是您在下面返回的匿名类。 -
感谢您的建议!在 classOf[SeasonalityService] 的情况下,我收到: With Option null without Option 0 Returned default values, expected Option(2) and 10
-
好吧,你忘了模拟那个对象(你在模拟
dMock,但在测试hMock)