scala - 如何使用 Mockito 在 Scala 对象中模拟函数?

标签 scala mockito scalatest

我对 Scala 真的很陌生。我尝试使用 Mockito 模拟一个简单的 Scala 函数,但出现以下错误。我已经检查了互联网,但我无法找出错误。

object TempScalaService {
  def login(userName: String, password: String): Boolean = {
    if (userName.equals("root") && password.equals("admin123")) {
      return true
    }
    else return false
  }
}

我的测试课在下面
class TempScalaServiceTest extends FunSuite with MockitoSugar{

  test ("test login "){
    val service = mock[TempScalaService.type]
    when(service.login("user", "testuser")).thenReturn(true)
    //some implementation
  }
}

但我收到以下错误:
Cannot mock/spy class     com.pearson.tellurium.analytics.aggregation.TempScalaService$
Mockito cannot mock/spy following:
- final classes
- anonymous classes
- primitive types
org.mockito.exceptions.base.MockitoException: 
Cannot mock/spy class    com.pearson.tellurium.analytics.aggregation.TempScalaService$
Mockito cannot mock/spy following:
- final classes
- anonymous classes
- primitive types
   at  org.scalatest.mock.MockitoSugar$class.mock(MockitoSugar.scala:74)
    at    com.pearson.tellurium.analytics.aggregation.TempScalaServiceTest.mock(Temp    ScalaServiceTest.scala:7)
at     com.pearson.tellurium.analytics.aggregation.TempScalaServiceTest$$anonfun$    1.apply$mcV$sp(TempScalaServiceTest.scala:10)
    at    com.pearson.tellurium.analytics.aggregation.TempScalaServiceTest$$anonfun$    1.apply(TempScalaServiceTest.scala:9)
    at     com.pearson.tellurium.analytics.aggregation.TempScalaServiceTest$$anonfun$    1.apply(TempScalaServiceTest.scala:9)
    at    org.scalatest.Transformer$$anonfun$apply$1.apply$mcV$sp(Transformer.scala:    22)
    at org.scalatest.OutcomeOf$class.outcomeOf(OutcomeOf.scala:85)

最佳答案

您可以在对象扩展的特征中定义方法。然后简单地模拟特征:

trait Login {
  def login(userName: String, password: String): Boolean
}

object TempScalaService extends Login {
   def login(userName: String, password: String): Boolean = {
     if (userName.equals("root") && password.equals("admin123")) {
   return true
   }
    else return false
  }
}

//in your test
val service = mock[Login]

关于scala - 如何使用 Mockito 在 Scala 对象中模拟函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41663476/

相关文章:

scala - 使用流在 scala 中进行延迟评估

java - 如何使用 Mockito 和 Java 在方法中传递模拟参数

scala - Spock 参数化与 Scala TableDrivenPropertyChecks

Scalatest GeneratorDrivenPropertyChecks 初始化种子

scala - 如何用 Scala 写 shortly "filter first/last n elements satisfying a given function"?

Scala:具有多个构造函数的通用类

java - 如何使用功能接口(interface)/lambda 参数模拟 void 方法?

java - 使用带有通用方法签名的 Mockito (java, eclipse) v1.9

scala - 为什么在IntelliJ中运行Scala 2.13测试而不是在Scala 2.12中运行时出现此错误?

unit-testing - 改进此代码的方法