Как избежать использования allow_any_instance_of, если вы издеваетесь над методом, который находится внутри тестируемого экземпляра

Эта ошибка возникает, среди прочего, когда у вас есть значения NaN в серии. Может быть так?

Эти функции NaN плохо обрабатываются функцией hist matplotlib. Например:

s = pd.Series([1,2,3,2,2,3,5,2,3,2,np.nan])
fig, ax = plt.subplots()
ax.hist(s, alpha=0.9, color='blue')

производит ту же ошибку AttributeError: max must be larger than min in range parameter.. Один из вариантов - это, например, удаление NaN перед построением графика. Это будет работать:

ax.hist(s.dropna(), alpha=0.9, color='blue')

Еще одна опция - использовать метод pandas hist в вашей серии и предоставить axes[0] ключевому слову ax:

dfj2_MARKET1['VSPD1_perc'].hist(ax=axes[0], alpha=0.9, color='blue')
0
задан Albert Català 17 January 2019 в 07:30
поделиться

1 ответ

Если вы хотите использовать вызов приватного метода внутри функции инициализации, я сомневаюсь, что нет метода, кроме allow_any_instance_of. А вставка строкового литерала the name в определение метода является неправильным синтаксисом.

Тем не менее, вы можете реорганизовать свой код, чтобы использовать test double для упрощения тестирования.

Код ниже демонстрирует мою идею:

setup.rb

class Player
  attr_reader :name
  def initialize(name)
    @name = name
  end
end

class Setup
  class Client
    def cli_input
      $stdin.gets.chomp.strip
    end
  end

  attr_reader :player

  def initialize(client)
    @client = client
    @player = new_player(cli_input)
  end

  private

  def cli_input
    @client.cli_input
  end

  def new_player(name)
    Player.new(name)
  end
end

setup_spec.rb

RSpec.describe Setup do
  describe 'initialize' do

    it 'creates a player assigned to a instance variable' do
      client = Setup::Client.new
      allow(client).to receive(:cli_input).and_return("John")
      setup = Setup.new(client)
      expect(setup.player.name).to eq('John')
    end
  end
end
0
ответ дан Tranvu Xuannhat 17 January 2019 в 07:30
поделиться
Другие вопросы по тегам:

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