如何使用libgit2sharp和moq模拟分支?

问题描述 投票:1回答:1

我需要检查我的命令方法的行为是否正确进行了检出。为此,我尝试嘲笑:

  • 一个存储库;
  • 两个分支;

这两个分支是一个当前分支,另一个是将来的分支。

存储库将具有前面提到的两个分支,我将执行从一个分支到另一个分支的签出。

为此,我使用NSpec作为我的单元测试套件,使用moq作为我的模拟框架,使用libgit2sharp作为版本控制,并使用fluentAssertions实现期望。

但是这个(应该是)简单的任务对我来说已经接近不可能完成的任务。我认为这是因为我缺乏使用这些工具(libgit2sharp和moq)的深度。在来到这里之前,我在网上搜索了很多内容。因此,我认为这不是重复的问题。

[我面临的问题之一是当我模拟(成功)一个存储库时,但是当我尝试添加分支(通过调用repo.Branches.Addrepo.CreateBranch)时,我得到了该模拟对象没有的错误这些方法。这是正确的,因为它们是扩展方法,我发现moq与静态方法有关。

嗯,就这样:

如何模拟存在两个分支的存储库,其中两个分支是当前分支,可以使用libgit2sharp和moq进行检出并从当前分支切换到另一个分支?

当前代码看起来像这样:

    it["Executa mudança de branches"] = () =>
    {
        var repository = new Mock<IRepository>();
        repository.Setup(rp => rp.Branches.Add("confidence", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644", false));
        repository.Setup(rp => rp.Branches.Add("goodDesign", "be3563ae3f795b2b4353bcce3a527ad0a4f7f645", false));

        repository.Object.CreateBranch("confidence", "be3563ae3f795b2b4353bcce3a527ad0a4f7f644");
        repository.Object.CreateBranch("goodDesign", "be3563ae3f795b2b4353bcce3a527ad0a4f7f645");

        repository.Object.Checkout(rep.Object.Branches["goodDesign"]);

        repository.Object.Head.Name.Should().Be("goodDesign");

        //my class in test 
        var versionControl = new VersionControl(repository);

        versionControl.ChangeToBranch("confidence");
        versionControl.CurrentBranch.Should().Be("confidence");

    };

并且,如果无法使用这些工具。我该怎么办?

[OH,我忘了说我不是英语为母语的人,所以对于我在这里确实犯过的任何错误,我深感抱歉。

c# unit-testing tdd moq libgit2sharp
1个回答
0
投票

我很幸运,并且包装了整个客户端,所以我可以将Branches公开为BracnCollection,而不是IEnumerable<Branch>

public IEnumerable<Branch> GetBranches() {
    return repository.Branches.AsEnumerable();
}
© www.soinside.com 2019 - 2024. All rights reserved.