我从没想过我需要在这个网站上提问,因为一切都已经正常回答,但是Scalatra ...我没有找到很多信息,所以这里是:
我没有经历所有这些,所以也许我错过了一些东西,但据我所知,如果我想测试我在Scalatra上开发的API,我需要每次运行测试时启动服务器,对吗?
第二个问题,如何在方法上重置调用计数器,这样我就不必计算自测试套件开始以来调用该方法的次数?现在使用这个给我不止一个,因为它算上一次测试。
val servlet = new Servlet(eventRepoMock)
addServlet(servlet, "/*")
我仍然可以通过计算或将测试作为第一次测试来解决问题,但这不是一个可持续的解决方案......
我发现的其他事情: 模拟的重置方法...未找到 http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#17
在类范围中隔离测试: 我们需要添加
servlet.repo = mock[EventRepo]
我们不能在每次初始化时重复addServlet https://etorreborre.github.io/specs2/guide/SPECS2-3.5/org.specs2.guide.Isolation.html
我尝试的最后一件事是:
repo
但是class EventServiceSpec extends ScalatraSpec with Mockito with Before { def is = s2"""
Event Service
GET an existing event
must return status 200 $get_status200
must return the event with id = :id $get_rightEventElement
must call findById once on the event repository $get_findByIdOnRepo
"""
lazy val anEvent = Event(1, "Some Event"
lazy val eventsBaseUrl = "/events"
lazy val existingEventUrl = s"$eventsBaseUrl/${anEvent.id}"
lazy val eventRepoMock = mock[EventRepository]
lazy val servlet = new Servlet(eventRepoMock)
addServlet(servlet, "/*")
def before = {
eventRepoMock.findById(anEvent.id) returns Option(anEvent)
eventRepoMock.findById(unexistingId) returns None
eventRepoMock.save(anEvent) returns Option(anEvent)
}
def get_status200 = get(existingEventUrl){
status must_== 200
}
def get_findByIdOnRepo = get(existingEventUrl){
// TODO count considering previous test... need to find a cleaner way
there was three(eventRepoMock).findById(anEvent.id)
}
是一个值,我无法像这样改变它。
这些“解决方案”都不是很干净,所以我想知道是否有人有天才的想法可以解决这个问题!?
提前谢谢!
编辑: 感谢Eric的评论,上面的问题已经解决了(这很容易),但现在我有问题因为我正在测试get / post是异步调用所以重置模拟不会在正确的时间发生...任何建议?< / p>
以下是代码的简化版本:
LEFT JOIN (
SELECT MESSAGE_ID,
EXTRACTABLE_COUNT EXTRACT_VALUE
FROM MBX_EXTRACT_COUNT) M3
ON M1.MESSAGE_ID = M3.MESSAGE_ID
LEFT JOIN (
SELECT MESSAGE_ID,
EXTRACTABLE_UNTIL EXTRACT_VALUE
FROM MBX_EXTRACT_TIL) M4
ON M1.MESSAGE_ID = M4.MESSAGE_ID
LEFT JOIN (
SELECT MESSAGE_ID,
EXTRACTABLE EXTRACT_VALUE
FROM MBX_EXTRACTABLE) M5
ON M1.MESSAGE_ID = M5.MESSAGE_ID