scalamock - 使用 scalamock 模拟在构造函数中“工作”的对象
问题描述
我正在尝试模拟一个接受一些 ctor 参数并在构造函数中做一些工作的类。
除了包装我试图模拟的顽皮类之外,ScalaMock 中是否有任何东西实际上可以避免调用构造函数(因为它当前在构造方法中抛出了 NPE)
解决方案
不,那是不可能的。所有模拟都是要模拟的类型的子类,因此将始终调用构造函数。但是,您可以为构造函数中使用的类型构造模拟并指定具体的子类型。例如
import ConstructorWorkaroundTest.{HardToMock, Something}
import org.scalamock.scalatest.MockFactory
import org.scalatest.FunSuite
class ConstructorWorkaroundTest extends FunSuite with MockFactory {
test("does not work") {
val m = mock[HardToMock]
}
test("works") {
val s = stub[Something]
class BetterToMock extends HardToMock(s)
val m = mock[BetterToMock]
m.foo _ expects() returning "hello" once()
m.foo()
}
}
object ConstructorWorkaroundTest {
trait Something { def length: Int }
class HardToMock(s: Something) {
val naughty = s.length
def foo() = "hi"
}
}
推荐阅读
- facebook - 如何获取访问令牌以将评论作者数据拉入 Integromat 以用于我拥有的 Facebook 群组中的帖子
- azure - 如何为 Get-AzureADUserAppRoleAssignment 创建循环?
- android - ClassNotFoundException: com.mysql.jdbc.Driver Error using Mysql and android
- r - 如何根据输入字符值命名新数据框
- mysql - 在没有-p的情况下使用my.ini从命令行访问mysql.exe?
- sql - 排除常见列的数据值
- javascript - 带有 HTML、Javascript 和 PHP 的动态表?
- java - 播放框架错误:未找到:值消息
- r - 查找特定列的 ID 不同的行
- wpf - XAML Islands ProgressRing 白色背景