模拟一个git repo来测试

时间:2015-10-19 23:48:48

标签: git unit-testing testing

是否有一种简单的方法来模拟git服务器/ repo以进行单元测试?我不想测试git本身,而是我的代码如何与git交互。

我想做点什么

create git@localhost.com:myRepo.git c:/somepath
copy somefile.txt c:/somepath

然后当我

git clone git@localhost.com:myRepo.git

返回c:/ somepath(somefile.txt)的全部内容,无需身份验证。我想测试我的代码如何处理克隆,因此对这个git repo的所有调用都应该自动通过身份验证。

我查看了git守护程序,但是它运行在真正的git上,所以我的测试代码最终必须进行大量的repo内容管理(添加,提交,分支等),这似乎是不必要的。

3 个答案:

答案 0 :(得分:1)

看起来您可以将JGit用于此目的。以下是使用它创建一个空存储库的示例,该存储库可以通过http:

连接

https://github.com/centic9/jgit-cookbook/blob/master/httpserver/src/main/java/org/dstadler/jgit/server/Main.java

答案 1 :(得分:0)

您可以创建自己的脚本,该脚本存在于名为' git'的本地目录中。并从那里嘲笑你想要的任何行为。

答案 2 :(得分:0)

您不需要服务器来克隆。它可以在普通目录上运行。

建立一个存储库。

$ git init /path/to/repo

把一些东西放进去。

$ cd /path/to/repo
$ touch foo bar
$ git add .
$ git ci
[master (root-commit) 3c99023] Some files.
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 bar
 create mode 100644 foo

克隆它。

$ git clone /path/to/repo /path/to/clone
$ cd /path/to/clone
$ ls
.git  bar  foo

请注意,如果您推送到非裸存储库,git不会喜欢它,因此您可能希望进行将/path/to/repo转换为裸存储库的中间步骤。最简单的方法是制作一个裸克隆并将其用于克隆的所有其他内容。

$ git clone --bare /path/to/repo /path/to/upstream
$ git clone /path/to/upstream /path/to/clone
...use /path/to/clone as normal pushing to /path/to/upstream...

你最初也可以制作一个裸克隆,而不是预先填充它。