Manipulácia s testovaním jednotky

V prípade jednoduchých aj komplexných konektorov je najlepšie a dôrazne odporúčame pridať testy zariadenia.

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

Zvážte 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 testovací kód zariadenia je tvorená počtom faktov a niekoľko bežných kódov pre rámec testu zariadenia ValueToText (, Fact , , Facts Facts.Summarize ). Nasledujúci kód poskytuje vzorovú množinu faktov (bežný kód nájdete v časti UnitTesting.query.pq):

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 v Visual Studio sa vyhodnotia všetky fakty a poskytne sa vizuálny súhrn mierok o prístupoch:

Príklad miery odovzdávanie.

Implementácia testovania jednotky skorým testovaním v procese vývoja konektorov vám umožňuje dodržiavať princípy vývoja riadené testom. Predstavte si, že musíte napísať funkciu s názvom Uri.GetHost , ktorá vráti iba údaje hostiteľa z identifikátora URI. Môžete začať napísanie testovacieho prípadu a overiť, č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ť ďalšie testy, aby sa zabezpečilo, že funkcia správne spracuje okrajové prípady.

Skorá verzia funkcie môže odovzdať niektoré, ale nie všetky testy:

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. Vďaka tomu je tiež jednoduché zabezpečiť, aby budúce aktualizácie funkcie náhodne neodstránili žiadnu zo základných funkcií.

Všetky testy prejdú.