1

最近我开始在我的单元测试中使用 ScalaMock 库,它运行良好,直到我想在多个测试中使用相同的 stab(在测试套件中全局声明)。

这是一个例子:

import org.scalamock.scalatest.MockFactory
import org.scalatest.FunSuite

trait Bank {
  def transaction(amount: Double): Double
  def deposit(amount: Double): Double
}

class OloloSuite extends FunSuite with MockFactory {
  val fakeBank = stub[Bank]
  (fakeBank.transaction _).when(10.0).returns(9.0)
  (fakeBank.deposit _).when(10.0).returns(11.0)

  //Pass
  test("Transaction test") {
    assert(fakeBank.transaction(10.0) === 9.0)
  }

  //Fails
  test("Deposit test") {
    assert(fakeBank.deposit(10.0) === 11.0)
  }
}

如何让“存款测试”通过?

4

2 回答 2

3

请在此处阅读文档:http: //scalamock.org/user-guide/sharing-scalatest/

您的选择:

  • 将 OneInstancePerTest 与您的测试套件混合

  • 或创建一个夹具(例如,参见上面的链接)

于 2017-06-12T16:37:41.503 回答
1

对此的快速解决方法是在测试中移动“期望”函数:

val fakeBank = stub[Bank]

test("Transaction test") {
  (fakeBank.transaction _).when(10.0).returns(9.0).anyNumberOfTimes()
  assert(fakeBank.transaction(10.0) === 9.0)
}

test("Deposit test") {
  (fakeBank.deposit _).when(10.0).returns(11.0).anyNumberOfTimes()
  assert(fakeBank.deposit(10.0) === 11.0)
}

但是,如果您想为不同的测试获得相同的结果,这仍然不方便:(

于 2017-06-12T13:44:54.080 回答