单元测试我正在进行依赖注入的方法

Unit testing a method in which I am doing a dependency injection

我有一个包含两个 类 的终端应用程序:Todo 和 TodoApp。下面的方法存在于 TodoApp 中,我想对该方法进行单元测试并将其隔离在我的测试中。由于我在方法中进行依赖注入,我怎么能模拟它呢? (@todos 是 TodoApp initialize 中的一个空数组)

 def add(task, day, todo = Todo)
    @todos.push(todo.new(task, day))
    return "#{task} was added to your todos"
 end

在此先感谢您的帮助。

我想你的代码应该是这样的。

class TodoApp
  def initialize 
    @todos = []
  end

  def add(task, day, todo = Todo)
    @todos.push(todo.new(task, day))
    return "#{task} was added to your todos"
  end
end

这不是将空数组注入 TodoApp。因此,您将很难从测试中访问它。

但是,如果您的 TodoApp 对象如下所示:

class TodoApp
  def initialize(todos = [])
    @todos = todos
  end

  def add(task, day, todo = Todo)
    @todos.push(todo.new(task, day))
    return "#{task} was added to your todos"
  end
end

现在您正在向 TodoApp 中注入一些可以被模拟,甚至可以被评估的东西:

describe TodoApp do
  subject(:app) { described_class.new(todos) }

  let(:todos) { [] }

  describe '#add' do
    subject(:add) { app.add(task, day) }

    let(:task) { 'task' }
    let(:day) { 'day' }

    it 'pushes the item on the list of todos' do
      expect { add }.to change { todos.length }.by(1)
    end
  end
end