給定一個包含幾個實例變量和一些方法的類。一些實例變量可通過attr_reader
和attr_accessor
訪問。因此其他人是私人的。
一些私有實例變量在其中一個實例方法中被設置並在另一個方法中讀取/使用。如何設置方法測試中使用的私有實例變量?
爲了測試我正在使用RSpec。由於我對Ruby還是個新手,並且想要把所有的東西都搞定,所以我將測試定義得相當細緻。因此,對於每個實例方法,我都有一個describe
塊,它們本身被劃分爲context
和it
的子集。一般環境前提條件定義爲before
。
但是,當測試其中一個方法,即利用但不設置其中一個私有變量時,我需要調用另一個方法,即設置此變量。這看起來相當超重,對我來說不是模塊化的。
有沒有辦法強制一個私人實例變量到某個值。類似於「取出」的私有實例變量的值,其值爲Object::instance_eval(:var)
。
還沒有想過存根訪問器呢。可能會使我的很多測試數據(一些文本文件,應該由我的程序檢測和解析)過時。看起來很不錯。謝謝:) – 2012-01-27 19:18:35
只是爲了澄清,在你的答案中,你是否聲稱'instance_eval'打破了類封裝或者'instance_variable_set'呢? – Seanny123 2013-12-16 08:28:41
@ Seanny123'instance_eval'和'instance_variable_set'都修改了實例私有的內部狀態,不應該在對象之外進行修改。 – 2013-12-16 10:25:59