2012-10-25 35 views
8

Tôi có một lớp có phương pháp khởi tạo sau đây.Biến các biến mẫu trong các thử nghiệm rspec

def initialize(my_var) 
    @my_var = my_var 
end 

và tôi muốn thử nghiệm phương pháp mà sau đó làm điều gì đó để @my_var

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

làm thế nào để thay đổi @my_var trước khi thử nghiệm mà nó trả về một mảng đúng cách?

Điều này có thể được nếu không có người truy cập cho @my_var không?

Trả lời

25

Điều này nghe có vẻ không đúng. Rspec nên kiểm tra hành vi giao diện của các lớp và các mô hình của bạn - không phải là việc thực hiện nội bộ (trong đó các biến thể hiện chắc chắn là). Có nhiều cách để làm điều này, nhưng bạn có chắc bạn không muốn có một accessor cho biến đó?

Nhưng dù sao, bạn có thể sử dụng my_object.instance_variable_get("@my_var")my_object.instance_variable_set("@my_var", value) để thao tác biến.

+1

lý do tôi đang làm điều này là phương pháp khởi tạo của tôi đang đọc từ tệp, những gì tôi đang cố gắng thực hiện là 'Tệp' và ghi dữ liệu được xử lý dự kiến ​​từ tệp đó mà không cần tệp hỗ trợ thử nghiệm của tôi. Sau đó tôi có thể bỏ qua phương thức khởi tạo đó để kiểm tra bất kỳ phương thức nào khác trong lớp của tôi. –

+1

@JosephLeBrech, bạn cũng có thể thử sử dụng StringIO thay vì tệp – faron

Các vấn đề liên quan