Spracovanie testovania jednotky

V prípade jednoduchých aj komplexných konektorov je pridanie testov zariadenia osvedčeným postupom a dôrazne odporúčame.

Testovanie jednotky sa vykonáva v kontexte súpravy Power Query SDK vo Visual Studiu. Každý test je definovaný ako Fact hodnota, ktorá má názov, očakávanú hodnotu a skutočnú hodnotu. Vo väčšine prípadov bude "skutočná hodnota" výrazom jazyka M, ktorý testuje časť vášho výrazu.

Zoberme si veľmi jednoduché rozšírenie, ktoré exportuje tri funkcie:

section Unittesting;

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

Tento kód testu zariadenia sa skladá z viacerých faktov a zväzku bežného kódu pre testovací rámec zariadenia (ValueToText, , FactFacts, Facts.Summarize). Nasledujúci kód obsahuje vzorovú množinu faktov (prejdite na súbor UnitTesting.query.pq pre bežný kód):

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];

Spustením ukážky vo Visual Studiu sa vyhodnotia všetky fakty a poskytne vám vizuálny súhrn úspešnosti:

Príklad miery úspešnosti.

Implementácia testovania jednotky na začiatku procesu vývoja konektora vám umožňuje dodržiavať zásady vývoja založeného na teste. Predstavte si, že potrebujete napísať funkciu s názvom Uri.GetHost , ktorá vráti iba hostiteľské údaje z identifikátora URI. Napísaním testovacieho prípadu môžete začať s overením, či funkcia správne vykonáva očakávanú funkciu:

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

Je možné zapísať aj ďalšie testy, aby sa zaistilo, že funkcia vhodným spôsobom spracováva okrajové prípady.

Staršia verzia funkcie môže prejsť niektorými testami, ale nie všetkými testami:

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

Niektoré testy zlyhajú.

Konečná verzia funkcie by mala prejsť všetkými testami zariadenia. Tým sa tiež zjednodušuje zabezpečenie toho, aby budúce aktualizácie funkcie náhodne neodstránili žiadnu zo svojich základných funkcií.

Všetky testy prejdú.