我有一个简单的MySQL包装器类,它将运行查询并返回结果。
class Rsql
  def initialize(db)
    @client = Mysql2::Client
    @db = db
  end
  def execute_query()
    client = @client.new(@db)
    client.query("select 1")
  end
end
我想测试一些涉及查询结果的内容,但我不想实际连接到数据库以获取结果。我尝试了此测试,但无法正常工作:
RSpec.describe Rsql do
  it "does it" do
    mock_database = double
    rsql = Rsql.new(mock_database)
    mock_mysql_client = double
    allow(mock_mysql_client).to receive(:query).and_return({"1" => 1})
    allow_any_instance_of(Mysql2::Client).to receive(:new).and_return(mock_mysql_client)
    expect(rsql.execute_query).to eq({"1" => 1})
  end
end
allow_any_instance_of()用allow()作品代替。我给人的印象allow_any_instance_of()是某种全局的“假装该类在整个程序中以这种方式表现”,而allow()针对某个类的特定实例。
有人可以向我解释这种行为吗?我是Rspec的新手,所以很抱歉这个答案很明显。我尝试搜索答案,但无法找到正确的搜索字符串。也许我不知道何时找到它。
我想运行一个 Spring Boot 服务,而不需要任何与控制器相关的东西。我希望它每小时运行一个计划任务,并在需要时执行工作。我想使用 Spring Boot,因为我已经知道如何设置 Hibernate ORM,并且我正在重复使用许多与另一个 Spring Boot 服务相同的存储库。因此,我启动了一个新的 Spring Boot 项目,并省略了 start-web 包。
我遇到的主要问题是,尽管设置了计划任务,但服务启动并立即退出,而不运行计划任务。在我的脑海中,我想象该服务只是坐在那里,运行,等待时间触发我配置的预定作业,然后就一直睡觉。是我的期望不好,还是我配置错误?