为私有(private)方法编写测试是好的做法吗?考虑以下简单示例:classGrouphas_many:membersprivatedefrelease_membersmembers.each{|member|member.update_attributesgroup_id:nil}endend在RSpec中为release_members方法编写测试是否是一个好习惯?我相信您必须编写测试,即使用send调用该方法。group.send(:release_members)有时不受欢迎。 最佳答案 您不应该测试私有(private)
我有一个包含许多静态方法的类。每个人都必须调用一个通用方法,但我尽量不公开后一种方法。将其设为私有(private)只允许从该类的自己的实例进行访问?Protected似乎也不能解决这里的问题。如何在静态上下文中隐藏do_calc不被外部调用?(让它可以从前两个静态方法调用。)classFoodefself.bardo_calc()enddefself.bazdo_calc()enddefself.do_calcendend 最佳答案 首先,static并不是Ruby行话的真正组成部分。举个简单的例子:classBardefself
尝试运行rakecucumber:ok并收到此错误:/Users/dev/.rbenv/versions/1.9.2-p290/lib/ruby/gems/1.9.1/gems/rack-1.3.4/lib/rack/backports/uri/common_192。rb:53:警告:常量WFKV_已经初始化然后:命令失败,状态为(1):[/Users/dev/.rbenv/versions/1.9.2-p290/bin...]我是Rails的新手,Google没有针对此错误提供任何信息。编辑:我试过添加bundleexec,但没有任何区别。这是我用--trace得到的结果:/User
有什么方法可以在ruby中使实例变量“私有(private)”(C++或Java定义)?换句话说,我希望以下代码导致错误。classBasedefinitialize()@x=10endendclassDerived 最佳答案 像Ruby中的大多数东西一样,实例变量并不是真正的“私有(private)”,任何人都可以通过d.instance_variable_get:@x访问。不过,与Java/C++不同,Ruby中的实例变量始终是私有(private)的。它们从来都不像方法那样是公共(public)API的一部分,因为它们只能
我正在学习Ruby,但已经到了让我感到困惑的地步。我正在使用的书上讲的是private、public和protectedmethods,但我还是有点糊涂。它们之间有什么区别? 最佳答案 公共(public)-可以从任何地方调用Private-不能在类作用域外调用该方法。对象只能给自己发送消息例如:面包师有bake方法是公开的,但break_eggs是私有(private)的protected-只要默认对象self是与您正在调用其方法的对象相同的类的实例,您就可以调用对象的protected方法例如:使用n保护方法,c1可以要求c2执
在Ruby中如何创建私有(private)类常量?(即在类(class)内可见但在类外不可见的)classPersonSECRET='xxx'#Howtomakeclassprivate??defshow_secretputs"Secret:#{SECRET}"endendPerson.new.show_secretputsPerson::SECRET#I'dlikethistofail 最佳答案 从ruby1.9.3开始,您有了Module#private_constant方法,这似乎正是您想要的:classPersonSEC
我有四个模型(Document、Question、Question::Document和Answer)。在我的Answer模型中有validates:text,presence:{:unless=>Proc.new{|a|a.question.is_a?Question::Document}}这给了我警告警告:Question::Document引用的顶层常量文档如何防止出现此警告(不重命名我的类)? 最佳答案 您的文件夹/文件结构应如下所示:app/models/question/document.rbanswer.rbdocum
我正在尝试引用关联扩展,但它出错了:NameError(uninitializedconstantUser::ListerExtension):app/models/user.rb:2:in`'这是我的实现:app/models/user.rbclassUsertrue,:extend=>Listerlib/lister.rbmoduleListerExtensiondeflisterself.map(&:to_s).join(',')endend我正在使用Railsv3.1.3。 最佳答案 AndrewMarshall对自动加载设
给定一个包含几个实例变量和一些方法的类。一些实例变量设置为可通过attr_reader和attr_accessor访问。因此其他的都是私有(private)的。一些私有(private)实例变量在一个实例方法中设置,并在另一个方法中读取/使用。我使用RSpec进行测试。由于我对Ruby还是个新手,并且希望把所有事情都做好,所以我将我的测试定义为相当细粒度的。因此,我为每个实例方法获得了一个describeblock,它们本身被划分为context和it的子集。一般环境先决条件用before定义。但是,当测试其中一种使用但未设置私有(private)变量的方法时,我需要调用另一种方法,即
这个问题在这里已经有了答案:Howtospecaprivatemethod(4个答案)关闭9年前。是的,我知道,测试私有(private)方法不是一个好主意(而且我阅读此线程-http://www.ruby-forum.com/topic/197346-还有一些其他)但是我怎样才能测试下面的代码呢?我使用xmpp4r。在我的公共(public)方法#listen中,我开始接收jabber像这样的消息:deflisten@client.add_message_callbackdo|m|do_things_with_message(m)endendprivatedefdo_things_w