Udostępnij przez


Obsługa testów jednostkowych

Uwaga / Notatka

Ta zawartość ma zastosowanie do starszego zestawu Power Query SDK w programie Visual Studio. Obecnie nowy zestaw Power Query SDK w programie Visual Studio Code zawiera w pełni funkcjonalną strukturę testową, którą zachęcamy do testowania i dowiedzenia się więcej.

Zarówno w przypadku prostych, jak i złożonych łączników dodawanie testów jednostkowych jest najlepszym rozwiązaniem i zdecydowanie zalecanym rozwiązaniem.

Testowanie jednostkowe jest przeprowadzane w kontekście zestawu Power Query SDK programu Visual Studio. Każdy test jest definiowany jako element Fact o nazwie, oczekiwanej wartości i rzeczywistej wartości. W większości przypadków wyrażenie "rzeczywista wartość" jest wyrażeniem języka M, które testuje część wyrażenia.

Rozważ rozszerzenie, które eksportuje trzy funkcje:

section Unittesting;

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

Ten kod testu jednostkowego składa się z wielu faktów i wielu typowych kodów dla struktury testów jednostkowych (ValueToText, Fact, Facts, Facts.Summarize). Poniższy kod zawiera przykładowy zestaw faktów (odnosi się do UnitTesting.query.pq dla wspólnego kodu):

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

Uruchomienie przykładu w programie Visual Studio ocenia wszystkie Fakty i udostępnia wizualne podsumowanie wskaźników sukcesu.

Zrzut ekranu przedstawiający dane wyjściowe zapytania programu Visual Studio M z przykładem współczynników przekazywania.

Implementowanie testów jednostkowych na wczesnym etapie procesu tworzenia łącznika umożliwia przestrzeganie zasad programowania opartego na testach. Wyobraź sobie, że musisz napisać funkcję o nazwie Uri.GetHost , która zwraca tylko dane hosta z identyfikatora URI. Możesz zacząć od zapisania przypadku testowego, aby sprawdzić, czy funkcja prawidłowo wykonuje oczekiwaną funkcję:

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

Więcej testów można napisać, aby upewnić się, że funkcja odpowiednio obsługuje przypadki brzegowe.

Wczesna wersja funkcji może przejść niektóre, ale nie wszystkie testy:

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

Zrzut ekranu przedstawiający dane wyjściowe zapytania programu Visual Studio M, w których niektóre testy kończą się niepowodzeniem.

Ostateczna wersja funkcji powinna przejść wszystkie testy jednostkowe. Ta wersja również ułatwia zapewnienie, że przyszłe aktualizacje funkcji nie usuną przypadkowo żadnej z jej podstawowych funkcji.

Zrzut ekranu przedstawiający dane wyjściowe zapytania programu Visual Studio M, w których wszystkie testy przechodzą pomyślnie.