覆盖模拟对象中的方法

时间:2014-06-29 17:47:58

标签: scala unit-testing

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

我需要做的是提供该功能的全新实现。我不是特别高兴为每个潜在的输入提供模拟式when / thenResult对,即我不想写:

when(mock.foo(5)).thenResult(3)
when(mock.foo(7)).thenResult(121)
...

我宁愿写一些类似的东西:

mock.foo = (a: Int) => if (a == 5) 3 else ...

我应该选择哪种模拟框架以简单的方式替换函数的整个实现?

2 个答案:

答案 0 :(得分:0)

如果您只是覆盖一种方法并希望通过实际定义方法来实现它,那么您根本不需要模拟框架。

如果它是一个课程,只需扩展您的课程,覆盖该方法并注入您的扩展程序。

如果它是一个对象或最终类,当然你无法扩展,但是你就不能用很多框架进行模拟,或者很容易注入一个替代。

答案 1 :(得分:0)

http://scalamock.org/user-guide/advanced_topics/

参见" onCall"方法

(fooMock.increment _)期望(*)onCall {arg:Int => arg + 1}