有没有办法测试嵌套函数(理想情况下使用ScalaTest)?
例如,有没有办法在下面的代码中测试g()
:
def f() = {
def g() = "a string!"
g() + "– says g"
}
答案 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()