У меня есть класс, который содержит кучу методов, я написал модульные тесты для каждого метода. Основным методом в классе является метод encrypt
, который принимает сообщение и шифрует его. Я также написал как 5 других методов, которые используются этим методом шифрования, но я не хочу, чтобы пользователь мог вызвать эти методы, я просто хочу использовать их внутри метода шифрования, чтобы выполнить эту работу, но я не хочу, чтобы пользователь делал как @ obj.some_method_that_is_not_encrypt, я хочу сделать только метод encrypt
invokable, я знаю, что могу сделать эти методы частными, но тогда мои модульные тесты не удастся. Как мне с этим справиться?Как ограничить пользователей от вызова определенных методов
0
A
ответ
1
модульных тесты можно использовать Object#send(...)
для вызова частных методов:
class Foo
private
def bar
"ok"
end
end
f = Foo.new
f.bar # => NoMethodError: private method `bar' called...
f.send(:bar) # => "ok"
Таким образом, ваш метод «шифровать» может быть только публичной, но он все еще может использовать частные методы, которые не подвергаются воздействию вежливых пользователей вашей библиотеки (они могут, конечно, использовать send
также, если они захотят).
Обратите также внимание на то, что особый аспект «частных» методов заключается в том, что они не могут быть вызваны с явным приемником, даже в том же классе. Поэтому вы не могли позвонить self.my_private_method
, вместо этого вы должны просто позвонить my_private_method
. Например:
class Foo
def foo
self.bar # => NoMethodError: private method `bar' called...
bar # => "ok"
end
private
def bar; "ok"; end
end
Смежные вопросы
- 1. Ограничить WCF для приема вызова от определенных удаленных клиентов
- 2. Как ограничить файлы для определенных пользователей в Amazon-S3
- 3. Oracle скрывает столбцы от определенных пользователей
- 4. Скрыть комментарии от определенных пользователей?
- 5. Как скрыть сообщения от определенных пользователей?
- 6. Контроль доступа определенных пользователей
- 7. Как ограничить пользователей только возможностью выбора определенных дисков?
- 8. Ограничить доступ к файлам для определенных пользователей в IIS
- 9. Есть ли простой способ ограничить веб-страницу для определенных пользователей?
- 10. Как ограничить пользователей вкладкой
- 11. AD Список пользователей от определенных OU
- 12. MYSQL: Найти все сообщения от определенных пользователей
- 13. Как ограничить пользователей в activemq?
- 14. Как ограничить вызов методов клиентами?
- 15. Ограничить пользователей от просмотра функции лямбда
- 16. Ограничить отчет пользователей для определенных маршрутов, используя API-интерфейс Embed
- 17. Django - скрыть ссылки от определенных пользователей
- 18. VBA скрыть листы от определенных пользователей
- 19. MySql: Скрыть определенные таблицы от определенных пользователей
- 20. Как ограничить метод вызова
- 21. Как ограничить количество пользователей, получающих очки пользователей?
- 22. Запретить googlebot от вызова методов ajax
- 23. вызова методов в зависимости от метода вызывающего
- 24. Вызов определенных методов
- 25. Как мы можем отказаться от определенных HTTP-методов в IIS?
- 26. Как ограничить пользователей загрузкой определенного типа файла?
- 27. вызова OnClick методы от других методов
- 28. Как ограничить обнаружение пользователей 1?
- 29. Как ограничить число пользователей fifo?
- 30. Как ограничить пользователей своим поддоменом
посмотреть здесь http://stackoverflow.com/questions/267237/whats-the-best-way-to-unit-test-protected-private-methods-in-ruby вы можете использовать отправить чтобы обойти частные. – Doon
@ Да, но разве это не вонючий? –
Определение запаха оставлено как упражнение для читателя :) он открывает совершенно новую банку червей. Но тот факт, что ваши (или ваши классы) пользователи могут делать это и обходить частные средства частным образом, следует рассматривать как предложение в любом случае. Но, увы, у меня нет хорошего ответа. Обычно я тестирую публичные интерфейсы/поведение класса, в отличие от каждой функции, для правильного или неправильного. – Doon