如何在GIT上使用断言实现PHPUnitTest?

时间:2015-02-22 20:58:19

标签: php git unit-testing phpunit

我有一个GITWrapper,它维护一个GIT目录。对于几个测试,我需要这些东西:

  • 带GIT的目录
  • 一个不包含文件的初始提交
  • 一个包含几个新文件的提交
  • 包含对文件进行一些更改的一次提交

我的GitWrapper现在走过了历史并做了些什么。所以我需要测试这些东西。例如:

  

前提条件/ GitHistory如上所述。   GitWrapper应该指出文件系统及其内容的一些差异。

这些是我需要测试的东西但不知道如何。我想有一些简单或常见的解决方案,比如使用vfsStream或其他帮助器,我还不知道。所以我想到了这些问题:

  • 您如何在UnitTest中获得此回购?
  • 存放库将放在哪里?
  • 如何回滚下一次测试的回购更改?

我很想看到解决这个问题的常用方法。 vfsStream可能是一个解决方案,但我不确定这些前置条件的正确解决方案是什么。

1 个答案:

答案 0 :(得分:1)

  • 如果测试仓库的设置很短,我建议只编写一个执行所需操作的脚本。类似的东西:

    # file setup.sh :
    #!/bin/sh
    
    repo=$1
    
    # create the repo :
    mkdir -p $1
    cd $1
    git init
    
    # first empty commit :
    git commit --allow-empty -m 'first commit'
    
    # second commit : a couple of new files
    echo "Foo" > bar.txt
    echo "Hello" > world.txt
    git add -A
    git commit -m 'second commit'
    
    # etc ...
    

设置单元测试类似于:

exec('unittest/git/setup.sh', '/tmp/randomString'):

撕下它:

exec('rm', '-rf', '/tmp/randomString');
  • 如果您想要的设置更大:使用您的设置制作一个git repo,只需在单元测试开始时将其克隆到/tmp中的某处,然后将其删除。

    // setup
    exec('git', 'clone', 'path/or/url/to/initial/setup', '/tmp/randomString');
    
    // teardown
    exec('rm', '-rf', '/tmp/randomString');