10

有什么方法可以测试嵌套函数(最好使用 ScalaTest)?

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

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

2 回答 2

9

g在外面是不可见的f,所以我敢说不,至少不是没有反思。

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

如果测试g对您很重要,请gf. 不过,这可能会破坏您的设计。

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

于 2011-03-17T12:19:39.283 回答
0

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

一般来说,我同意不应该测试私有方法这一事实,但如果你维护的代码写得不好......

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

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

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

于 2020-11-07T04:48:05.367 回答