การจัดการการทดสอบหน่วย

ทั้งตัวเชื่อมต่อแบบง่ายและซับซ้อน การเพิ่มการทดสอบหน่วยเป็นแนวทางปฏิบัติที่ดีที่สุดและแนะแนวสูง

การทดสอบหน่วยสามารถบรรลุผลในบริบทของ Visual Studio ของPower Query SDK การทดสอบแต่ละรายการถูก Fact กําหนดเป็น ที่มีชื่อ ค่าที่คาดหวัง มีค่าจริง ในกรณีส่วนใหญ่ "ค่าจริง" จะเป็นนิพจน์ M ที่ทดสอบส่วนของนิพจน์ของคุณ

พิจารณาส่วนขยายง่ายมากที่ส่งออกฟังก์ชันสามฟังก์ชัน:

section Unittesting;

shared UnitTesting.ReturnsABC = () => "ABC";
shared UnitTesting.Returns123 = () => "123";
shared UnitTesting.ReturnTableWithFiveRows = () => Table.Repeat(#table({"a"},{{1}}),5);

รหัสการทดสอบหน่วยนี้ถูกสร้างขึ้นจากจํานวนข้อเท็จจริง และโค้ดทั่วไปจํานวนมากสนั้นที่ใช้บ่อยมากในเฟรมเวิร์กการทดสอบหน่วย ( ValueToText Fact , , , Facts Facts.Summarize ) โค้ดต่อไปนี้แสดงตัวอย่างชุดข้อเท็จจริง (ดู UnitTesting.query.pq for the common code):

section UnitTestingTests;

shared MyExtension.UnitTest = 
[
    // Put any common variables here if you only want them to be evaluated once

    // Fact(<Name of the Test>, <Expected Value>, <Actual Value>)
    facts = 
    {
        Fact("Check that this function returns 'ABC'",  // name of the test
            "ABC",                                      // expected value
            UnitTesting.ReturnsABC()                    // expression to evaluate (let or single statement)
        ),
        Fact("Check that this function returns '123'",
            "123",
            UnitTesting.Returns123()
        ),
        Fact("Result should contain 5 rows",
            5,
            Table.RowCount(UnitTesting.ReturnTableWithFiveRows())
        ),
        Fact("Values should be equal (using a let statement)",
            "Hello World",
            let
                a = "Hello World"
            in
                a
        )
    },
    report = Facts.Summarize(facts)
][report];

การเรียกใช้ตัวอย่างใน Visual Studio จะประเมินข้อเท็จจริงทั้งหมดและให้ข้อมูลสรุปการแสดงผลด้วยภาพของอัตราผ่าน:

ตัวอย่างของอัตราผ่าน

การใช้การทดสอบหน่วยในช่วงต้นของกระบวนการพัฒนาตัวเชื่อมต่อช่วยให้คุณสามารถปฏิบัติตามหลักการของการพัฒนาที่ขับเคลื่อนด้วยการทดสอบได้ สมมติว่าคุณต้องเขียนฟังก์ชันที่เรียกว่า ที่ Uri.GetHost ส่งกลับเฉพาะข้อมูลโฮสต์จาก URI คุณอาจเริ่มต้นโดยการเขียนกรณีการทดสอบเพื่อตรวจสอบว่าฟังก์ชันมีประสิทธิภาพการฟังก์ชันที่คาดไว้อย่างเหมาะสม:

Fact("Returns host from URI",
    "https://bing.com",
    Uri.GetHost("https://bing.com/subpath/query?param=1&param2=hello")
),
Fact("Handles port number appropriately",
    "https://bing.com:8080",
    Uri.GetHost("https://bing.com:8080/subpath/query?param=1&param2=hello")
)

สามารถเขียนการทดสอบเพิ่มเติมเพื่อให้แน่ใจว่าฟังก์ชันสามารถจัดการกรณีขอบได้อย่างเหมาะสม

ฟังก์ชันรุ่นก่อนหน้าอาจผ่านการทดสอบบางอย่างแต่ไม่ใช่ทุกการทดสอบ:

Uri.GetHost = (url) =>
    let
        parts = Uri.Parts(url)
    in
        parts[Scheme] & "://" & parts[Host]

การทดสอบบางอย่างล้มเหลว

เวอร์ชัน สุดท้ายของฟังก์ชันควร ผ่านการทดสอบหน่วยทั้งหมด นอกจากนี้ยังช่วยให้ง่ายต่อการตรวจสอบให้แน่ใจว่าการอัปเดตในอนาคตในฟังก์ชันจะไม่ลบฟังก์ชันพื้นฐานใดๆ ของฟังก์ชันออกโดยไม่ตั้งใจ

การทดสอบทั้งหมดผ่าน