Почему я не могу проверить, что экземпляр класса определен - PullRequest
0 голосов
/ 17 апреля 2019

У меня есть вспомогательный класс, который создает экземпляр другого класса

class TestEnv {
val questionsController = new QuestionsController(...)
}

Я выполняю модульное тестирование QuestionsController и создал базовый контрольный пример

class QuestionsControllerUnitSpec extends PlaySpec with BeforeAndAfterAll with BeforeAndAfterEach with OneAppPerSuiteWithComponents{

  override def beforeEach() = {
    println("------------new test -----------------")
  }


  override def components: BuiltInComponents = new BuiltInComponentsFromContext(context) with NoHttpFiltersComponents {

    import play.api.mvc.Results
    import play.api.routing.Router
    import play.api.routing.sird._


    lazy val router: Router = Router.from({
      case GET(p"/") => defaultActionBuilder {
        Results.Ok("success!")
      }
    })




  }

  "Question Controller " should {
    "be created" in {
      val testEnv = new TestEnv(components = components)
      val qc:QuestionsController = testEnv.questionsController
      qc mustBe defined //I get compilation error 

    }
  }


}

Я получаю следующую ошибку компиляции

Error:(52, 10) could not find implicit value for parameter definition: org.scalatest.enablers.Definition[controllers.QuestionsController]
      qc mustBe defined
Error:(52, 10) not enough arguments for method mustBe: (implicit definition: org.scalatest.enablers.Definition[controllers.QuestionsController])org.scalatest.Assertion.
Unspecified value parameter definition.
      qc mustBe defined

Я проверил определение mustBe в MustMatchers.class. Он определяется как def mustBe(right : org.scalatest.words.DefinedWord)(implicit definition : org.scalatest.enablers.Definition[T]) : org.scalatest.Assertion = { /* compiled code */ }

Почему я получаю ошибку.

Ответы [ 2 ]

0 голосов
/ 23 апреля 2019
Синтаксис соответствия

defined может использоваться с пользовательскими типами, если мы предоставляем неявную реализацию черты Definition. Например, скажем, у нас есть определенный пользователем класс

class Foo {
  val bar = 3
}

и мы предоставляем неявное определение

implicit val fooDefinition = new Definition[Foo] {
  override def isDefined(foo: Foo): Boolean = foo.bar != null
}

тогда мы можем использовать defined синтаксис

(new Foo()) mustBe defined

Если предусмотрена аналогичная неявная реализация Definition[QuestionsController], то ошибка компилятора должна быть устранена.

0 голосов
/ 21 апреля 2019

Я рад принять другой ответ, если он может дать более точный ответ.Я полагаю, я проверяю не ту вещь.То, что я делаю, похоже на объявление целого числа и проверку его существования!Вместо этого я должен проверить значение целого числа.

О matchers, дополнительная информация на http://doc.scalatest.org/3.0.1/#org.scalatest.MustMatchers. Более подробная информация на Definition на http://doc.scalatest.org/3.0.1/#org.scalatest.enablers.Definition

...