Как протестировать Singleton-класс?

Я использую RSpec и хочу протестировать конструктора Singleton-класса больше чем в один раз.

Как я могу сделать это?

Наилучшие пожелания

11
задан brainfck 15 December 2009 в 17:51
поделиться

5 ответов

посмотрите http://blog.ardes.com/2006/12/11/testing-singletons- with-ruby :

require 'singleton'

class <<Singleton
  def included_with_reset(klass)
    included_without_reset(klass)
    class <<klass
      def reset_instance
        Singleton.send :__init__, self
        self
      end
    end
  end
  alias_method :included_without_reset, :included
  alias_method :included, :included_with_reset
end
3
ответ дан 3 December 2019 в 02:30
поделиться

Вы можете просто создать новый это и блок для каждой спецификации. Разбейте свою спецификацию на тестируемую единицу. Используйте «до» и «после», чтобы настроить и очистить все, что вы сделали.

before (: each) и after (: each) выполняются для каждого it блок.

-1
ответ дан 3 December 2019 в 02:30
поделиться

Реорганизуйте его в класс, который можно создавать несколько раз. У этого есть побочный эффект (некоторые сказали бы, выгода), заключающийся в удалении природы Singleton из класса.

Посмотрите на это с другой стороны: вы обнаружили необходимость вызывать конструктор более одного раза. Почему должен класс создавать только один экземпляр? Какие преимущества дает синглтон?

1
ответ дан 3 December 2019 в 02:30
поделиться

Позволяет ли RSpec выполнять действия перед тестированием? Итак, вы можете добавить еще один метод к своему статическому классу, который очищает все, что было сделано во время конструктора. Затем просто вызывайте это перед каждым тестом.

0
ответ дан 3 December 2019 в 02:30
поделиться

Одна из причин, по которой люди используют синглоны, потому что "глобальные переменные - это плохо, м'кей"? Одиночка - это глобальная переменная, секвестрируемая в пространстве имен, с ленивой конкретизацией. Подумайте, может ли истинная глобальная переменная упростить вещи, особенно если вам не нужны ленивые инстанцирования

.
2
ответ дан 3 December 2019 в 02:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: