【问题标题】:How to mock branches using libgit2sharp and moq?如何使用 libgit2sharp 和 moq 模拟分支?
【发布时间】:2016-05-04 21:21:20
【问题描述】:

我需要检查我的命令方法的行为是否正确地进行了结帐。为此,我试图模拟:

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

这两个分支一个是当前分支,一个是未来分支。

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

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

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

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

嗯,就这样吧:

如何模拟存在 2 个分支的存储库,其中一个是当前分支,以便可以使用 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");

    };

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

哦,我忘了说我不是以英语为母语的人,所以对于我在这里确实犯的任何错误,我真的很抱歉。

【问题讨论】:

标签: c# unit-testing tdd moq libgit2sharp


【解决方案1】:

我运气不错,包裹了整个客户端,所以我能够将Branches 暴露为BracnCollection,而不是IEnumerable&lt;Branch&gt;

public IEnumerable<Branch> GetBranches() {
    return repository.Branches.AsEnumerable();
}

然后你也可以模拟集合和分支类。

【讨论】:

    猜你喜欢
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2010-10-19
    • 2016-09-30
    • 2019-10-06
    • 1970-01-01
    • 2020-10-27
    相关资源
    最近更新 更多