ScalaMock:存根仅适用于第一次测试
ScalaMock: Stub works only for first test
最近我开始在我的单元测试中使用 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)
}
}
如何让"Deposit test"通过?
一个快速解决方法是将 "expectation" 函数移到测试中:
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)
}
但是如果你想不同的测试得到相同的结果还是不太方便:(
请阅读此处的文档:http://scalamock.org/user-guide/sharing-scalatest/
您的选择:
将 OneInstancePerTest 与您的测试套件混合使用
或创建夹具(参见上面的 link 示例)
最近我开始在我的单元测试中使用 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)
}
}
如何让"Deposit test"通过?
一个快速解决方法是将 "expectation" 函数移到测试中:
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)
}
但是如果你想不同的测试得到相同的结果还是不太方便:(
请阅读此处的文档:http://scalamock.org/user-guide/sharing-scalatest/
您的选择:
将 OneInstancePerTest 与您的测试套件混合使用
或创建夹具(参见上面的 link 示例)