Более описательное сообщение об ошибке с использованием пользовательского сопоставления с mockedResource.expects(where(???)) в ScalaMock

Я работаю со ScalaMock и ScalaTest, чтобы собрать несколько модульных тестов. Я хочу использовать синтаксис ожидания ScalaMock, чтобы подтвердить, что служба, над которой я работаю, передает приемлемый Json в имитируемый ресурс. В этом случае приемлемо означает, что некоторые внутренние поля могут отличаться, поэтому я написал пользовательскую функцию, чтобы определить, совпадают ли нужные мне поля. Проблема с этим заключается в том, что он производит относительно бесполезную регистрацию, когда ожидания не оправдываются. Ожидания установлены следующим образом:

(mockedResource.doAThing(_: Json)(_: SomeImplicitThing))
  .expects(
    where(
      jsonSimilarAndImplicitEqual(
        expectedJson,
        anInstanceOfImplicitThing
      )(_, _)
    )
  )

Производить следующую регистрацию при сбое:

- should forward acceptable Json to the mockedResource
  Unsatisfied expectation:

  Expected:
  [info]   inAnyOrder {
  [info]     <mock-1> MockedResource.doAThing<function1> once (never called - UNSATISFIED)
  [info]   }

Я хотел бы иметь возможность предоставить некоторую пользовательскую функцию ведения журнала, чтобы описать, почему jsonSimilarAndImplicitEqual оценивается как false в разумном месте. Я надеялся, что блока inAnyOrderWithLogging будет достаточно, но оказалось, что я даже не могу использовать эту конструкцию, поскольку она не поддерживается для AsyncMockFactory.


person Charles Yan    schedule 10.04.2018    source источник


Ответы (1)


Вы можете использовать specs2-mock (оболочка для Mockito) вместо ScalaMock и используйте захват аргументов. Используя черту org.specs2.Mockito, вы можете написать val captor = capture[String], а затем there was one(value).method(captor.capture). Как только вы зафиксировали аргумент, вы можете использовать scalatest Matchers для подтверждения соответствующих свойств.

person tilde    schedule 04.05.2018