Dada una clase con un par de variables de instancia y algunos métodos. Algunas variables de instancia se configuran como accesibles a través de attr_reader
y attr_accessor
. Por lo tanto, los otros son privados.
Algunas de las variables de instancia privadas se configuran en uno de los métodos de instancia y se leen/utilizan en otro método.¿Cómo establecer la variable de instancia privada utilizada en una prueba de método?
Para probar Estoy utilizando RSpec. Como todavía soy nuevo para Ruby y quiero hacer las cosas bien, definí que mis pruebas son bastante precisas. Por lo tanto, tengo un bloque describe
para cada método de instancia, que a su vez están divididos en un subconjunto de context
sy it
s. Las condiciones previas ambientales generales se definen con before
.
Sin embargo, al probar uno de los métodos, que utiliza pero no establece una de las variables privadas, necesito llamar al otro método, que está configurando esta variable. Esto parece bastante pesado y no modular para mí.
Hay una manera de forzar una variable de instancia privada a un cierto valor. Similar a "arrancando" el valor de una variable de instancia privada con Object::instance_eval(:var)
.
No he pensado aún en los accesos de troquelado. Probablemente, muchos de mis datos de prueba (algunos archivos de texto, que deberían ser detectados y analizados por mi programa) quedarán obsoletos. Parece una buena manera. Gracias :) –
Solo para aclarar, en su respuesta, ¿usted afirma que 'instancia_eval' rompe la encapsulación de clase o que' instancia_variable_set' también lo hace? – Seanny123
@ Seanny123 Tanto 'instance_eval' como' instance_variable_set' modifican el estado interno que es privado para la instancia y no debe modificarse fuera del objeto. –