จะจำลองสาขาโดยใช้ libgit2sharp และ moq ได้อย่างไร

ฉันต้องตรวจสอบว่าพฤติกรรมของวิธีคำสั่งของฉันกำลังชำระเงินอย่างถูกต้องหรือไม่ เพื่อสิ่งนี้ ฉันกำลังพยายามเยาะเย้ย:

  • พื้นที่เก็บข้อมูล;
  • สองสาขา;

ทั้งสองสาขาคือสาขาหนึ่งเป็นสาขาปัจจุบันและอีกสาขาหนึ่งเป็นสาขาในอนาคต

พื้นที่เก็บข้อมูลจะมีสองสาขาที่กล่าวถึงก่อนหน้านี้ และฉันจะดำเนินการชำระเงินจากสาขาหนึ่งไปอีกสาขาหนึ่ง

สำหรับสิ่งนี้ ฉันใช้ NSpec เป็นชุดทดสอบหน่วย, moq เป็นเฟรมเวิร์กจำลอง, libgit2sharp เป็นตัวควบคุมเวอร์ชัน และยืนยันได้อย่างคล่องแคล่วตามความคาดหวัง

แต่งานง่ายๆ นี้ (ควรจะเป็น) กำลังเข้าใกล้สิ่งที่เป็นไปไม่ได้สำหรับฉันมากขึ้น ฉันคิดว่านั่นเป็นเพราะว่าฉันขาดความลึกในการใช้เครื่องมือเหล่านั้น (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();
}

จากนั้นคุณสามารถจำลองคลาสคอลเลกชันและสาขาได้เช่นกัน

person Skyblade    schedule 26.11.2019