Ruby 伪造git存储库进行测试

Ruby 伪造git存储库进行测试,ruby,git,testing,rspec,Ruby,Git,Testing,Rspec,我正在编写一个包装git调用的应用程序。我需要能够测试它(使用rspec),所以我正在归档一个git存储库,并在测试执行时提取它 然而,这变得单调乏味,因为更改测试存储库意味着重新打包所有内容。此外,我需要能够准确地记住git存储库中包含的内容,这使得很难将测试存储库用于多个测试文件 我正在寻找类似的东西,也许我可以做如下事情: before :all do @test_repo = FakeGit::init @test_repo.add(file) @test_repo.comm

我正在编写一个包装
git
调用的应用程序。我需要能够测试它(使用
rspec
),所以我正在归档一个git存储库,并在测试执行时提取它

然而,这变得单调乏味,因为更改测试存储库意味着重新打包所有内容。此外,我需要能够准确地记住git存储库中包含的内容,这使得很难将测试存储库用于多个测试文件

我正在寻找类似的东西,也许我可以做如下事情:

before :all do
  @test_repo = FakeGit::init
  @test_repo.add(file)
  @test_repo.commit(file, "Some message") ===> returns "SHA_ID"
end
然后在测试代码中的某个地方,我可以执行如下操作:

it "should point to a SHA_ID" do
  @test_repo.rev_parse("HEAD").should == "SHA_ID"
end

除了包装git调用,您的应用程序还能做什么?除了调用需要测试的git之外,它还使用了其他逻辑吗?如果它只是一个包装器,那么测试应用程序就等于测试git本身,这可能是多余的

但是,如果应用程序带来的不仅仅是简单的git调用,那么最好创建一个在测试中模拟的“git调用”接口(或最接近的ruby等效接口)。然后,您将测试您的应用程序逻辑,直到它必须接触实际的git调用


为了简明地说明仿制品和赝品之间的区别。你似乎在试图制造假货,甚至使用真货。我建议您研究模拟而不是伪造/存根(假设您确实需要这样做),最简单的方法不是简单地存储一个创建测试repo的脚本,而不是存储测试repo本身吗?