gpt4 book ai didi

ruby - 如何测试模块中的私有(private)函数

转载 作者:太空宇宙 更新时间:2023-11-03 17:12:49 26 4
gpt4 key购买 nike

我有一个两部分的问题:

第 1 部分

我有一个模块,它有一个公共(public)类方法,该方法依赖于模块中的一些私有(private)辅助方法。测试这些私有(private)辅助方法的最佳方法是什么?它们包含需要测试的复杂逻辑,但不应公开调用它们,因为它们本身没有提供任何有用的信息。

我阅读了this约定要做的stackoverflow帖子:

module GTranslate
class Translator
def perform( text ); 'hola munda'; end
end

def self.translate( text )
t = Translator.new
t.perform( text )
end
end

然后在 GTranslate::Translator 类的公共(public)方法上编写测试。但是,我不希望此类能够实例化或调用它们的方法。

第 2 部分

看到模块上的公共(public)方法定义为 self.someMethodName,这是否意味着辅助方法必须定义为 self.helperName

不会有模块的实例(如果你甚至可以创建模块的实例(我是 Ruby 的新手))所以我不能使用实例上定义的 send 方法来从我的测试中调用方法?

有什么想法吗?

最佳答案

正如您将在其他答案中看到的那样,关于测试私有(private)方法存在一些争论。在测试它们之前,您应该考虑它是否是最佳选择。大卫布拉迪有一个伟大的podcall with Robert C. (Uncle Bob) Martin他们讨论了这个问题和一些可能的解决方案,包括通过公共(public)接口(interface)进行测试,以及重构到一个单独的类中。

话虽如此,这就是 Ruby。如果您想测试私有(private)方法,请使用 instance_eval(或 class_eval 用于类方法)在模块的上下文中运行您的测试。

编辑:在一些快速的 IRB 工作模块之后需要更多的工作

给定:

module Foo
class << self
private
def bar
...
end
end
end

测试 Foo.bar 放在你的测试文件中:

Module Foo
class << self
puiblic :bar
end
end

在测试期间,bar 将公开可见。

结束编辑

另见:

关于ruby - 如何测试模块中的私有(private)函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5696708/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com