Мне нужно проверить, правильно ли поведение моего командного метода выполняет проверку. Для этого я пытаюсь издеваться:
- репозиторий;
- Две ветки;
Две ветви: одна будет текущей ветвью, а другая - будущей ветвью.
Репозиторий будет иметь две ветки, упомянутые ранее, и я выполню проверку из одной ветки в другую.
Для этого я использую 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");
};
И, если это невозможно сделать с помощью этих инструментов. Как мне это сделать?
О, я забыл сказать, что я не являюсь носителем английского языка, поэтому мне очень жаль за любые ошибки, которые я, безусловно, сделал здесь.