如何使用Scalatra,Specs2,Mockito重置模拟调用计数器

时间:2015-04-30 21:32:06

标签: unit-testing mockito specs2 scalatra

我从没想过我需要在这个网站上提问,因为一切都已经正常回答,但是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

0 个答案:

没有答案