你可以在scala中测试嵌套函数吗?

时间:2011-03-17 00:06:41

标签: testing scala scalatest

有没有办法测试嵌套函数(理想情况下使用ScalaTest)?

例如,有没有办法在下面的代码中测试g()

def f() = {
  def g() = "a string!"
  g() + "– says g"
}

2 个答案:

答案 0 :(得分:8)

g之外无法看到

f,所以我敢说不,至少没有反思。

我认为测试g会打破单元测试的概念,因为你永远不应该测试实现细节,而只测试公共API行为。如果g的测试失败,则将错误跟踪到f中的错误是调试过程的一部分。

如果测试g对您很重要,请在g之外将f定义为(受保护)方法。但这可能会打破你的设计。

另一个想法是在原始代码中调用assert后调用g。这将在测试期间执行,如果属性不成立则引发异常,从而导致测试失败。它也会出现在常规代码中,但编译器可以删除它,因为assert(和随行数)是易于使用的(参见例如here)。

答案 1 :(得分:0)

您可以将方法设为private [package-name]-仍然会破坏设计,但将其保留为私有而不是受保护。

通常,我同意以下事实:不应测试私有方法,但是如果您维护的是编写得不好的代码...

private[example] def g() = "a string!"

def f() = {
  g() + "– says g"
}

同一包中的现在测试(示例)可以测试g()