【发布时间】:2016-05-04 21:21:20
【问题描述】:
我需要检查我的命令方法的行为是否正确地进行了结帐。为此,我试图模拟:
- 一个存储库;
- 两个分支;
这两个分支一个是当前分支,一个是未来分支。
存储库将具有前面提到的两个分支,我将执行从一个分支到另一个分支的签出。
为此,我使用 NSpec 作为我的单元测试套件,moq 作为我的模拟框架,libgit2sharp 作为版本控制和对预期的 fluentAssertions。
但这个(应该是)简单的任务对我来说越来越接近于不可能完成的任务。我认为这是因为我在使用这些工具(libgit2sharp 和 moq)方面缺乏深度。在来这里之前,我在网上搜索了很多。所以,我认为这不是重复的问题。
我面临的一个问题是当我模拟(成功)存储库时,但是当我尝试添加分支(通过调用 repo.Branches.Add 或 repo.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");
};
而且,如果无法使用这些工具。我该怎么做?
哦,我忘了说我不是以英语为母语的人,所以对于我在这里确实犯的任何错误,我真的很抱歉。
【问题讨论】:
-
你看过 libgit2sharp 测试套件吗,他们有起订量示例:github.com/libgit2/libgit2sharp/search?utf8=✓&q=moq
-
是的,我看了很多。我找到了一个 LibGit2Sharp.Tests/RepositoryExtensionsFixture.cs (github.com/libgit2/libgit2sharp/pull/182/files) 但它是一个旧代码,似乎已被删除。有一个类似于我所做的示例,但该策略不起作用。
标签: c# unit-testing tdd moq libgit2sharp