Obsługa testów jednostkowych
Uwaga
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 funkcjonalna struktura testowa, którą zachęcamy do testowania i uczenia 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 odbywa się 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ść" będzie wyrażeniem języka M, które testuje część wyrażenia.
Rozważ proste 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 (przejdź do pozycji 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 stawek 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¶m2=hello")
),
Fact("Handles port number appropriately",
"https://bing.com:8080",
Uri.GetHost("https://bing.com:8080/subpath/query?param=1¶m2=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]
Ostateczna wersja funkcji powinna przejść wszystkie testy jednostkowe. Ułatwia to również zapewnienie, że przyszłe aktualizacje funkcji nie zostaną przypadkowo usunięte z żadnej z jej podstawowych funkcji.