标签: private-methods

我应该使用RSpec测试私有方法吗?

为私有方法编写测试是一种好习惯吗?

考虑以下简单示例:

class Group
  has_many :members

  private

  def release_members
    members.each { |member| member.update_attributes group_id: nil }
  end
end
Run Code Online (Sandbox Code Playgroud)

在RSpec中为release_members方法编写测试是不错的做法?我相信你必须用send发出调用方法的测试.group.send(:release_members)这有时令人不悦.

ruby rspec private-methods

26
推荐指数
2
解决办法
1万
查看次数

一个类是否有用于仅包含(默认情况下)c ++中的私有成员?

默认情况下,类的成员在c ++中是私有的.

因此,我想知道是否有任何可能的用法来创建一个将其所有成员(变量和函数)默认设置为private的类.

换句话说,没有任何关键字是否存在任何有意义的类定义public,protected或者private

c++ private class private-members private-methods

25
推荐指数
4
解决办法
1898
查看次数

错误:尝试调用私有方法

来自C风格语法的悠久历史,现在正在尝试学习Ruby(在Rails上),我一直在用它的成语等问题分享我的问题,但今天我遇到了一个我没想到会出现问题的问题.我无法看到任何必须在我面前的东西.

我有一个二进制类,其中包含一个私有方法,用于从路径值派生URI值(uri和路径是类的属性).我打电话self.get_uri_from_path()从内部Binary.upload(),但我得到:

Attempt to call private method
Run Code Online (Sandbox Code Playgroud)

该模型的片段如下所示:

class Binary < ActiveRecord::Base
  has_one :image

  def upload( uploaded_file, save = false )
    save_as = File.join( self.get_bin_root(), '_tmp', uploaded_file.original_path )

    # write the file to a temporary directory
    # set a few object properties

    self.path   = save_as.sub( Rails.root.to_s + '/', '' )
    self.uri    = self.get_uri_from_path()
  end

  private

  def get_uri_from_path
    return self.path.sub( 'public', '' )
  end
end
Run Code Online (Sandbox Code Playgroud)

我打电话不正确吗?我错过了一些更基本的东西吗?目前唯一Binary.get_uri_from_path()被调用的地方是 - Binary.upload().我希望能够在同一个类中调用私有方法,除非Ruby做了与我使用的其他语言明显不同的东西.

谢谢.

ruby ruby-on-rails access-specifier private-methods

23
推荐指数
1
解决办法
2万
查看次数

有没有办法为S4 Reference Classes声明公共和私有方法?

先期:我清楚,R是一个功能性的语言,所以请不要咬;-)

我在很多程序中使用OOP方法都有很棒的经验.现在,我想知道在R中使用S4参考类时是否有办法区分公共方法和私有方法?

类定义

setRefClass("B",
    field=list(
        b.1="numeric",
        b.2="logical"
    ),
    methods=list(
        thisIsPublic=function(...) {
            thisIsPublic_ref(.self=.self, ...)
        },
        thisIsPrivate=function(...) {
            thisIsPrivate_ref(.self=.self, ...)
        }
    )
)

setRefClass("A",
    field=list(
        a.1="B"
    )
)
Run Code Online (Sandbox Code Playgroud)

注意

我通常不会将实际的方法定义放在类def中,而是将其分离为S4方法(即thisIsPublic_ref),原因如下:

  1. 这样,在单个方法defs变得非常大的情况下,类def保持清晰排列并且更容易阅读.
  2. 它允许您随时切换到方法的功能执行.作为x某个类的实例,您可以调用foo_ref(.self=x)而不是x$foo().
  3. compiler::cmpfun()如果你有"普通"的引用类方法,它允许你对我认为不可能的方法进行字节编译.

对于这个具体的例子来说,确实没那么复杂是有道理的,但我想我会说明这种方法.

方法定义

setGeneric(
    name="thisIsPublic_ref",
    signature=c(".self"),
    def=function(
        .self,
        ...
    ) {
    standardGeneric("thisIsPublic_ref")    
    }
)
setGeneric(
    name="thisIsPrivate_ref",
    signature=c(".self"),
    def=function(
        .self,
        ...
    ) {
    standardGeneric("thisIsPrivate_ref")    
    } …
Run Code Online (Sandbox Code Playgroud)

oop encapsulation r private-methods public-method

23
推荐指数
2
解决办法
5322
查看次数

什么时候/为什么要在课堂上私有化?

什么时候我应该做一个功能private,为什么这是个好主意?

c++ oop class-design private-methods

20
推荐指数
3
解决办法
3万
查看次数

在仅由构造函数调用的私有方法中赋值readonly变量

C#编译器给了我以下错误

CS0191:无法分配只读字段(构造函数或变量初始化程序除外)

我是否必须将代码(在我的私有函数中)移动到构造函数中?这听起来很尴尬.

请注意,私有方法仅供构造函数调用.我希望有一些属性可以用来标记相应的方法.

c# readonly private-methods

16
推荐指数
3
解决办法
1万
查看次数

将参数传递给PrivateObject方法

我正在尝试单元测试私有方法.我在这个问题上看到了下面的例子

Class target = new Class();
PrivateObject obj = new PrivateObject(target);
var retVal = obj.Invoke("PrivateMethod");
Assert.AreEqual(retVal);
Run Code Online (Sandbox Code Playgroud)

我的私人方法有2个参考参数.如何通过?

c# unit-testing private-methods

15
推荐指数
1
解决办法
1万
查看次数

将结构分区为私有和公共部分?

在C++和Java,数据结构可以具有private,publicprotected区域.我想将这个概念移植到我正在编写的C语言程序中.

是否有任何习惯用于在C中实现私有或受保护的函数指针和数据字段struct我知道C struct是公开的,我正在寻找一个成语来帮助隐藏一些实现细节并迫使用户使用公共接口.

注意:该商店已选择该语言,因此我无法将面向对象的概念应用到C.

谢谢.

c struct private-methods

14
推荐指数
2
解决办法
1万
查看次数

通过JMockit调用私有方法来测试结果

我使用JMockit 1.1,我想做的就是调用私有方法并测试返回值.但是,我无法从JMockit De-Encapsulation示例中了解如何执行此操作.

我试图测试的方法是这个类中的私有方法:

public class StringToTransaction {
   private List<String> parseTransactionString(final String input) {
      // .. processing
      return resultList;
   }
}
Run Code Online (Sandbox Code Playgroud)

我的测试代码如下.

@Test
public void testParsingForCommas() {
   final StringToTransaction tested = new StringToTransaction();
   final List<String> expected = new ArrayList<String>();
   // Add expected strings list here..
   new Expectations() {
      {
         invoke(tested, "parseTransactionString", "blah blah");
         returns(expected);
      }
   };
}
Run Code Online (Sandbox Code Playgroud)

而我得到的错误是:

java.lang.IllegalStateException:此时缺少对mocked类型的调用; 请确保仅在声明合适的模拟字段或参数后才会出现此类调用

也许我在这里误解了整个API,因为我认为我不想模拟这个类..只是测试调用私有方法的结果.

java junit jmockit private-methods

14
推荐指数
1
解决办法
3万
查看次数

Ruby on Rails私有方法?

如果我正在写一个私有方法,那么rails会认为这个词下的每个方法private都是私有的吗?或者它应该只对第一种方法是私有的?

  private

    def signed_in_user
      redirect_to signin_url, notice: "Please sign in." unless signed_in?
    end

    def correct_user
      @user = User.find(params[:id])
      redirect_to(root_path) unless current_user?(@user)
    end 
Run Code Online (Sandbox Code Playgroud)

这是否意味着signed_in_usercorrect_user私人?还是只是signed_in_user?这是否意味着每当我需要编写私有方法时,它应该在我的文件的末尾?

methods ruby-on-rails private-methods ruby-on-rails-3

12
推荐指数
2
解决办法
6460
查看次数