Podano klasę z kilkoma zmiennymi instancji i kilkoma metodami. Niektóre zmienne instancji są dostępne za pośrednictwem attr_reader
i attr_accessor
. Tak więc pozostałe są prywatne.
Niektóre prywatne instancyjne zmienne są ustawiane w ramach jednej z metod instancji i odczytywane/wykorzystywane w ramach innej metody.Jak ustawić prywatną instancję zmienną używaną w teście metody?
Do testowania używam RSpec. Ponieważ wciąż jestem nowicjuszem w Ruby i chcę wszystko naprawić, zdałem sobie sprawę, że moje testy są raczej drobiazgowe. Tak więc mam jeden blok describe
dla każdej metody instancji, które same są podzielone na podzbiory z context
s i it
s. Ogólne warunki środowiskowe definiuje się przy pomocy before
.
Jednak podczas testowania jednej z metod, która wykorzystuje, ale nie ustawia jednej ze zmiennych prywatnych, należy wywołać inną metodę, która ustawia tę zmienną. Wydaje mi się, że jest to raczej nadwaga i nie jest ona modułowa.
Czy istnieje sposób na wymuszenie zmiennej instancji prywatnej na pewną wartość. Podobne do "zgrywanie" wartość prywatnej zmiennej instancji z Object::instance_eval(:var)
.
Jeszcze nie myślałem o stublowych akcesoriach. Prawdopodobnie sprawiłoby, że wiele moich danych testowych (niektóre pliki tekstowe, które powinny zostać wykryte i przeanalizowane przez mój program) były przestarzałe. Wydaje się fajny sposób. Dzięki :) –
W celu wyjaśnienia, w twojej odpowiedzi, twierdzisz, że 'instance_eval' łamie enkapsulację klasy lub że' instance_variable_set' również działa? – Seanny123
@ Seanny123 Zarówno 'instance_eval' oraz' instance_variable_set' modyfikują wewnętrzny stan, który jest prywatny dla instancji i nie powinien być modyfikowany poza obiektem. –