1

我的 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"
)

我的 scalatest 类如下所示

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 时,错误似乎消失了。请帮忙,我错过了什么。

谢谢!

4

2 回答 2

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()
  }
}
于 2016-11-14T23:12:53.213 回答
0

<3.3.0 的版本与 Scalatest 3+ 不兼容。

我建议更新到 scalamock 3.4.2(写作时的最新版本)。

您总能在Maven Central上找到最新版本。

此外,无需指定scalamock-core,它会自动拉入。

于 2017-01-17T15:31:43.550 回答