我如何测试私有方法?

时间:2016-12-04 20:32:06

标签: crystal-lang

有没有办法使用Crystal的内置spec库对私有方法进行单元测试?

我来自PHP背景,并且可以使用ReflectionMethod::setAccessibility将方法的可访问性更改为public以允许对其进行测试。我在Crystal API文档中找不到任何类似内容,所以只是想知道是否存在这样的事情。

2 个答案:

答案 0 :(得分:3)

我同意不应该测试私人方法。但是,如果您真的想要这样做,您可以重新打开该类并重新定义该方法,而无需任何可见性(如此公开)并使用previous_def。例如:

class Foo
  private def bar(x, y)
    x + y
  end
end

# Reopen
class Foo
  # Redefine bar
  def bar(x, y)
    # Invoke the previous definition
    previous_def
  end
end

foo = Foo.new
p foo.bar(1, 2)

答案 1 :(得分:0)

如果应该在公共方法中测试Crystal类似于ruby的语言而不是私有方法。或者使用

的代码