Ошибки зависимостей scalatest и scala mock

Мой файл build.sbt выглядит следующим образом

name := "cakepattern"
version := "0.1"
scalaVersion := "2.11.8"
libraryDependencies ++= Seq(
  "org.scalatest" %% "scalatest" % "3.0.0" % "test",
  "org.scalamock" %% "scalamock-core" % "3.1.1" % "test",
  "org.scalamock" %% "scalamock-scalatest-support" % "3.1.1" % "test",
  "org.scalacheck" %% "scalacheck" % "1.13.0" % "test",
  "org.mockito" % "mockito-all" % "1.10.19"
)

И мой класс scalest выглядит следующим образом

package services

import config.MockAuthServiceComponent
import dto.{Tweet, User}
import org.scalamock.scalatest.MockFactory
import org.scalatest.{FlatSpec, OneInstancePerTest, Outcome}
import org.scalatest.matchers.MatchResult
import services.impl.DefaultTweetServiceComponent

class DefaultTweetServiceComponentTest extends FlatSpec with MockFactory with OneInstancePerTest{


  val tweetServiceComponent = new DefaultTweetServiceComponent with MockAuthServiceComponent {
    override val tweetService = DefaultTweetService
  }

}

Когда я пытаюсь выполнить sbt test:compile, я получаю следующую ошибку

Error:scalac: missing or invalid dependency detected while loading class file 'AbstractMockFactory.class'.
Could not access type NoArgTest in trait org.scalatest.Suite,
because it (or its dependencies) are missing. Check your build definition for
missing or conflicting dependencies. (Re-run with `-Ylog-classpath` to see the problematic classpath.)
A full rebuild may help if 'AbstractMockFactory.class' was compiled against an incompatible version of org.scalatest.Suite.

Ошибка, кажется, исчезает, когда я вынимаю MockFactory. Помогите, что я упускаю.

Спасибо!


person Abdul Rahman    schedule 14.11.2016    source источник


Ответы (2)


У вас есть какая-то конкретная причина использовать "scalamock-core" % "3.1.1"? Кажется, это несовместимо с "scalatest" % "3.0.0". Кажется, проблема не возникает, если вы обновитесь до "scalamock-core" % "3.3.0". Код ниже отлично компилируется для меня:

name := "cakepattern"

version := "0.1"

scalaVersion := "2.11.8"

libraryDependencies ++= Seq(
  "org.scalatest" %% "scalatest" % "3.0.0" % "test",
  "org.scalamock" %% "scalamock-core" % "3.3.0" % "test",
  "org.scalamock" %% "scalamock-scalatest-support" % "3.3.0" % "test",
  "org.scalacheck" %% "scalacheck" % "1.13.0" % "test",
  "org.mockito" % "mockito-all" % "1.10.19"
)

scalacOptions ++= Seq("-feature", "-unchecked", "-deprecation", "-encoding", "utf8")

а также

import org.scalamock.scalatest.MockFactory
import org.scalatest.{FlatSpec, OneInstancePerTest}

trait MockAuthServiceComponent

trait DefaultTweetServiceComponent {
  val tweetService: DefaultTweetService
}

case class DefaultTweetService()

class DefaultTweetServiceTest extends FlatSpec with MockFactory with OneInstancePerTest {

  val tweetServiceComponent = new DefaultTweetServiceComponent with MockAuthServiceComponent {
    override val tweetService = DefaultTweetService()
  }
}
person kikulikov    schedule 14.11.2016

Версии ‹3.3.0 несовместимы со Scalatest 3+.

Я предлагаю обновить до scalamock 3.4.2 (последняя на момент написания).

Вы всегда можете найти самую новую версию на Maven Central.

Кроме того, не нужно указывать scalamock-core, он подтягивается автоматически.

person Philipp    schedule 17.01.2017