scalamock / specs2: Что делать, если у меня нет утверждений? Ожидания только в IsolatedMockFactory

Если у меня нет явных утверждений, таких как count must_== 1 a в тесте Specs2 я получаю ошибку, указывающую, что неявное не может быть найдено.

// doesn't compile
class Example extends Specification {
  "You need an assertion" >> {
    // hello!
  }
}

Справедливо.

Но если я тоже использую скаляки MockContextЯ могу полагаться только на ожидания, а не на утверждения; mock что-то, и scalamock проверит вызов методов и т.д.;

class MockExample extends Specification {
  "I can use 'expectations' here instead" in new MockContext {
    val foo = mock[Foo]
    (foo.bar _).expects(*).once
    // no explicit assertions
  }     
}

Тем не менее, если я пытаюсь поделиться настройкой контекста, смешивая в IsolatedMockFactoryЯ вернулся к ошибке компилятора. Есть идеи как это исправить?

// doesn't compile
class AnotherMockExample extends Specification with IsolatedMockFactory {
  val foo = mock[Foo]
  "I can't use 'expectations' here any more" >> {        
    (foo.bar _).expects(*).once
  }  
}

1 ответ

Решение

Пример в specs2 принимает все, что имеет org.specs2.execute.AsResult экземпляр класса типов. поскольку (foo.bar _).expects.once имеет тип CallHandler Вы можете создать AsResult экземпляр для CallHandler который просто оценивает значение и возвращает Success

 implicit def CallHandlerAsResult[R : Defaultable]: AsResult[CallHandler[R]] = new AsResult {
    def asResult(c: =>CallHandler[R]) = {
      c
      Success
    }
 }

Поскольку сбои основаны на исключениях в ScalaMock, это должно привести к возникновению исключения, если какое-либо фиктивное ожидание не будет удовлетворено.

Другие вопросы по тегам