Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 重写模拟对象中的方法_Scala_Unit Testing - Fatal编程技术网

Scala 重写模拟对象中的方法

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

我需要编写一个单元测试,其中测试对象的一个依赖项将被模拟。在这个模拟对象中,我想覆盖一个函数(我根本不关心其他函数)

我需要做的是提供该功能的全新实现。我对为每个潜在输入提供mockito风格的when/thenResult对不是特别满意,即我不想写:

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这个词。