Bagaimana cara meniru cabang menggunakan libgit2sharp dan moq?

Saya perlu memeriksa apakah perilaku metode perintah saya melakukan checkout dengan benar. Untuk ini saya mencoba mengejek:

  • Sebuah gudang;
  • Dua cabang;

Kedua cabang tersebut adalah yang satu menjadi cabang saat ini dan yang lainnya menjadi cabang masa depan.

Repositori akan memiliki dua cabang yang disebutkan sebelumnya dan saya akan melakukan checkout dari satu cabang ke cabang lainnya.

Untuk ini saya menggunakan NSpec sebagai unit test suite saya, moq sebagai kerangka tiruan saya, libgit2sharp sebagai kontrol versi dan fluentAssertions sesuai harapan.

Namun tugas yang (seharusnya) sederhana ini semakin mendekati tugas yang mustahil bagi saya. Saya pikir itu karena kurangnya kedalaman saya dalam menggunakan alat-alat tersebut (libgit2sharp dan moq). Saya banyak mencari di web sebelum datang ke sini. Jadi, menurut saya ini bukan pertanyaan duplikat.

Salah satu masalah yang saya hadapi adalah ketika saya mengejek (dengan sukses) sebuah repositori, tetapi ketika saya mencoba menambahkan cabang (baik dengan memanggil repo.Branches.Add atau repo.CreateBranch) saya mendapatkan kesalahan bahwa objek yang diejek tidak memiliki metode tersebut. Dan itu benar, karena ini adalah metode ekstensi dan saya menemukan bahwa moq memiliki masalah dengan metode statis.

Nah, ini dia:

Bagaimana cara meniru repositori yang memiliki 2 cabang, salah satunya adalah cabang saat ini, agar dapat melakukan checkout dan beralih dari cabang saat ini ke cabang lainnya menggunakan libgit2sharp dan moq?

Kode saat ini terlihat seperti ini:

    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");

    };

Dan, jika tidak memungkinkan, lakukan dengan alat tersebut. Bagaimana saya bisa melakukannya?

OH, saya lupa mengatakan bahwa saya bukan penutur asli bahasa Inggris, jadi saya sangat menyesal atas kesalahan yang saya lakukan di sini.


person Daniel    schedule 04.05.2016    source sumber
comment
Pernahkah Anda melihat rangkaian pengujian libgit2sharp, mereka memiliki contoh Moq: github.com/libgit2/libgit2sharp /search?utf8=✓&q=moq   -  person SushiHangover    schedule 05.05.2016
comment
Ya, aku sering melihat ke sana. Saya telah menemukan LibGit2Sharp.Tests/RepositoryExtensionsFixture.cs (github.com/libgit2/libgit2sharp/ pull/182/files) tetapi merupakan kode lama, sepertinya telah dihapus. Ada contoh serupa dengan yang saya lakukan, tetapi strategi itu tidak berhasil.   -  person Daniel    schedule 05.05.2016


Jawaban (1)


Saya beruntung dan menyelesaikan seluruh klien, sehingga saya dapat mengekspos Branches bukan sebagai BracnCollection, tetapi sebagai IEnumerable<Branch>:

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

Kemudian Anda bisa meniru kelas koleksi dan Cabang juga.

person Skyblade    schedule 26.11.2019