Как издеваться над ветками с помощью libgit2sharp и moq?

Мне нужно проверить, правильно ли поведение моего командного метода выполняет проверку. Для этого я пытаюсь издеваться:

  • репозиторий;
  • Две ветки;

Две ветви: одна будет текущей ветвью, а другая - будущей ветвью.

Репозиторий будет иметь две ветки, упомянутые ранее, и я выполню проверку из одной ветки в другую.

Для этого я использую 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");

    };

И, если это невозможно сделать с помощью этих инструментов. Как мне это сделать?

О, я забыл сказать, что я не являюсь носителем английского языка, поэтому мне очень жаль за любые ошибки, которые я, безусловно, сделал здесь.


person Daniel    schedule 04.05.2016    source источник
comment
Вы смотрели набор тестов libgit2sharp, у них есть примеры Moq: github.com/libgit2/libgit2sharp /search?utf8=✓&q=moq   -  person SushiHangover    schedule 05.05.2016
comment
Да, я много там смотрел. Я нашел LibGit2Sharp.Tests/RepositoryExtensionsFixture.cs (github.com/libgit2/libgit2sharp/ pull/182/files), но это старый код, похоже, его удалили. Есть пример, похожий на то, что я сделал, но эта стратегия не работает.   -  person Daniel    schedule 05.05.2016


Ответы (1)


Мне повезло, и я завернул весь клиент, так что я смог выставить Branches не как BracnCollection, а как IEnumerable<Branch>:

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

Затем вы также можете издеваться над коллекцией и классом Branch.

person Skyblade    schedule 26.11.2019