Scala 重写模拟对象中的方法
我需要编写一个单元测试,其中测试对象的一个依赖项将被模拟。在这个模拟对象中,我想覆盖一个函数(我根本不关心其他函数) 我需要做的是提供该功能的全新实现。我对为每个潜在输入提供mockito风格的when/thenResult对不是特别满意,即我不想写:Scala 重写模拟对象中的方法,scala,unit-testing,Scala,Unit Testing,我需要编写一个单元测试,其中测试对象的一个依赖项将被模拟。在这个模拟对象中,我想覆盖一个函数(我根本不关心其他函数) 我需要做的是提供该功能的全新实现。我对为每个潜在输入提供mockito风格的when/thenResult对不是特别满意,即我不想写: when(mock.foo(5)).thenResult(3) when(mock.foo(7)).thenResult(121) ... 我更愿意写这样的东西: mock.foo = (a: Int) => if (a == 5) 3
when(mock.foo(5)).thenResult(3)
when(mock.foo(7)).thenResult(121)
...
我更愿意写这样的东西:
mock.foo = (a: Int) => if (a == 5) 3 else ...
我应该选择哪种模拟框架来轻松地替代函数的整个实现 如果您只覆盖一个方法,并且希望通过实际定义该方法来实现,那么根本不需要模拟框架 如果它是一个类,只需扩展类,重写方法并注入扩展 如果它是一个对象或一个最终类,当然你不能扩展,但是你也不能用很多框架来模拟,或者很容易地注入一个替代类。 参见“onCall”方法
(fooMock.increment)期望(*)onCall{arg:Int=>arg+1}我考虑过这一点,但这意味着调用“mock”对象的构造函数。在某些情况下,我希望避免这种情况(例如,当我模拟数据库访问类时,这些类可能在构造函数中具有一些与数据库相关的初始化),您也可以重写构造函数,这样它就不会执行数据库操作。但若事情变得太混乱,你们真的应该用一个mock,也许可以用when-then这个词。