使用Scala时,在IntelliJ中无法识别模拟

时间:2012-08-08 18:47:08

标签: unit-testing scala mocking

@RunWith(classOf[MockitoJUnitRunner])
class ScalaTest {

  var x  = mock[java.util.Map]
  val y  = mock[ClassA]
  val z  = mock[ClassB]
}

无论我在我的pom文件中设置什么依赖项,我都无法让Mock工作。编译器说不能解析符号MockClassOf。我在下面展示了我的依赖项:

<dependency>
  <groupId>org.scalamock</groupId>
  <artifactId>scalamock-scalatest-support_${scala.version}</artifactId>
  <version>2.4</version>
</dependency>
<dependency>
  <groupId>org.scalamock</groupId>
  <artifactId>scalamock-junit3-support_${scala.version}</artifactId>
  <version>2.4</version>
</dependency>

测试依赖性是:

<dependency>
  <groupId>org.scalatest</groupId>
  <artifactId>scalatest_${scala.version}</artifactId>
  <version>2.0.M3</version>
  <scope>test</scope>
</dependency>

<dependency>
  <groupId>org.mockito</groupId>
  <artifactId>mockito-core</artifactId>
  <version>1.9.0</version>
  <scope>test</scope>
</dependency>

这些是我的进口商品:

import org.junit.{Test, Before}
import org.junit.runner.RunWith
import org.mockito.runners.MockitoJUnitRunner

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

我不知道mockito但是根据

您的班级ScalaTest应该扩展单元套件,并且应该混合使用MockitoSugar(提供mock方法)。

如果在注释声明classOf中无法解析RunWith,则可能需要使用较新的Scala版本(2.8或更高版本)。

答案 1 :(得分:0)

您正在为ScalaTest和JUnit导入ScalaMock支持类,但您根本没有使用ScalaTest(您正在使用JUnit和我不熟悉的自定义运行器)并且似乎正在使用根据Stefan对yoru问题的评论,错误的特征组合。

如果您想使用ScalaTest作为测试运行器,您应该将一个相关的Suite类与MockitoSugar混合使用(请遵循ScalaTest documentation):

// First, create the mock object
val mockCollaborator = mock[Collaborator]

// Create the class under test and pass the mock to it
classUnderTest = new ClassUnderTest
classUnderTest.addListener(mock)

// Use the class under test
classUnderTest.addDocument("Document", new Array[Byte](0))
classUnderTest.addDocument("Document", new Array[Byte](0))
classUnderTest.addDocument("Document", new Array[Byte](0))
classUnderTest.addDocument("Document", new Array[Byte](0))

// Then verify the class under test used the mock object as expected
verify(mockCollaborator).documentAdded("Document")
verify(mockCollaborator, times(3)).documentChanged("Document")