2012-10-25 36 views
8

我有一个具有以下初始化方法的类。在rspec测试中填充实例变量

def initialize(my_var) 
    @my_var = my_var 
end 

,我想测试,然后做一些事情来@my_var

def split 
    @my_var.split(",") 
end 

的方法我怎么测试它正确返回一个数组前更改@my_var

这可能没有访问者@my_var

回答

25

这听起来不像是一种正确的做法。 Rspec应该测试你的类和模型的接口行为 - 而不是内部实现(无疑是哪个实例变量)。有办法做到这一点,但你确定你不想拥有该变量的访问器?

无论如何,您可以使用my_object.instance_variable_get("@my_var")my_object.instance_variable_set("@my_var", value)来操纵变量。

+1

我这样做的原因是,我的初始化方法是从文件读取,我试图做的是存根'文件',并从该文件写入预期的处理数据,而不需要文件来支持我的测试。然后我可以跳过这个初始化方法来测试我班的其他方法。 –

+1

@JosephLeBrech,你也可以尝试使用StringIO而不是文件 – faron