Mockito Заглушка последовательных вызовов (заглушка в стиле итератора), исключения и возврат void

Я изо всех сил пытаюсь заставить следующий тест работать, в основном я хочу, чтобы издевательский вызов службы вызывал исключение при первом вызове и работал нормально при втором вызове. Сервисный метод ничего не возвращает (void/Unit), написан на scala

import org.mockito.{Mockito}
import org.scalatest.mock.MockitoSugar
import org.scalatest.{BeforeAndAfter, FeatureSpec}
import org.mockito.Mockito._

class MyMocksSpec extends FeatureSpec with BeforeAndAfter with MockitoSugar {

  var myService: MyService = _

  var myController: MyController = _

  before {
    myService = mock[MyService]
    myController = new MyController(myService)
  }

  feature("a feature") {
    scenario("a scenario") {
      Mockito.doThrow(new RuntimeException).when(myService.sideEffect())
      Mockito.doNothing().when(myService.sideEffect())
      myController.showWebPage()
      myController.showWebPage()
      verify(myService, atLeastOnce()).sayHello("tony")
     verify(myService, atLeastOnce()).sideEffect()

    }
  }
}

class MyService {
  def sayHello(name: String) = {
    "hello " + name
  }

  def sideEffect(): Unit = {
    println("well i'm not doing much")
  }
}

class MyController(myService: MyService) {

  def showWebPage(): Unit = {
    myService.sideEffect()
    myService.sayHello("tony")
  }
}

Вот файл build.sbt

name := """camel-scala"""

version := "1.0"

scalaVersion := "2.11.7"

libraryDependencies ++= {
 val scalaTestVersion = "2.2.4"
 Seq(
   "org.scalatest" %% "scalatest" % scalaTestVersion % "test",
   "org.mockito" % "mockito-all" % "1.10.19")
}


Unfinished stubbing detected here:
-> at     MyMocksSpec$$anonfun$2$$anonfun$apply$mcV$sp$1.apply$mcV$sp(MyMocksSpec.scala:24)

E.g. thenReturn() may be missing.
Examples of correct stubbing:
    when(mock.isOk()).thenReturn(true);
    when(mock.isOk()).thenThrow(exception);
    doThrow(exception).when(mock).someVoidMethod();
Hints:
 1. missing thenReturn()
 2. you are trying to stub a final method, you naughty developer!
 3: you are stubbing the behaviour of another mock inside before 'thenReturn' instruction if completed

Я следовал примеру (я думаю) здесь


person Tony Murphy    schedule 04.11.2015    source источник
comment
какая строка кода не компилируется?   -  person vvg    schedule 05.11.2015


Ответы (1)


Оказывается, я неправильно настроил макет, решение ниже.

  Mockito.doThrow(new RuntimeException).when(myService).sideEffect()
  Mockito.doNothing().when(myService).sideEffect()

вместо неправильного

  Mockito.doThrow(new RuntimeException).when(myService.sideEffect())
  Mockito.doNothing().when(myService.sideEffect())
person Tony Murphy    schedule 05.11.2015