使用 ScalaTest,我想替换测试用例中的函数实现。我的用例:
object Module {
private def currentYear() = DateTime.now().year.get
def doSomething(): Unit = {
val year = currentYear()
// do something with the year
}
}
我想编写一个单元测试来测试 Module.doSomething
,但我不希望此测试用例取决于测试运行的实际年份。
在动态语言中,我经常使用可以替换函数实现以返回固定值的构造。
我希望我的测试用例将 Module.currentYear
的实现更改为始终返回 2014 年,无论实际年份是哪一年。
我发现了几个模拟库(Mockito,ScalaMock,...),但它们都只能创建新的模拟对象。它们似乎都无法取代方法的实现。
有办法做到这一点吗?如果不是,我如何测试这样的代码而不依赖于测试运行的年份?
最佳答案
一种方法是让您的测试用例可以访问do_something_with_the_year
(例如,使其受到包保护)。这也很好,因为它将查找依赖项和实际使用它们分开。
另一种方法是将您的逻辑放入特征中,使 currentYear
方法受到保护,并让该对象成为该特征的实例。这样您就可以在测试中根据特征创建一个自定义对象,而不需要任何模拟库。
关于Scala 测试 : Replace function implementation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25101867/