Håndtering af enhedstest
Bemærk
Dette indhold gælder for det ældre Power Query SDK i Visual Studio. I dag indeholder det nye Power Query SDK i Visual Studio Code en fuldt udvalgt teststruktur , som vi opfordrer dig til at teste og få mere at vide.
For både enkle og komplekse connectors er tilføjelse af enhedstest en bedste praksis og anbefales på det kraftigste.
Enhedstest udføres i forbindelse med Visual Studios Power Query SDK. Hver test er defineret som en Fact
, der har et navn, en forventet værdi og en faktisk værdi. I de fleste tilfælde vil den "faktiske værdi" være et M-udtryk, der tester en del af dit udtryk.
Overvej en simpel udvidelse, der eksporterer tre funktioner:
section Unittesting;
shared UnitTesting.ReturnsABC = () => "ABC";
shared UnitTesting.Returns123 = () => "123";
shared UnitTesting.ReturnTableWithFiveRows = () => Table.Repeat(#table({"a"},{{1}}),5);
Denne enhedstestkode består af mange fakta og en masse fælles kode for enhedsteststrukturen (ValueToText
, Fact
, Facts
, Facts.Summarize
). Følgende kode indeholder et eksempelsæt af fakta (gå til UnitTesting.query.pq for den fælles kode):
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];
Når du kører eksemplet i Visual Studio, evalueres alle fakta og giver dig en visuel oversigt over gennemløbshastighederne:
Implementering af enhedstest tidligt i connectorudviklingsprocessen giver dig mulighed for at følge principperne for testdrevet udvikling. Forestil dig, at du skal skrive en funktion kaldet Uri.GetHost
, der kun returnerer værtsdataene fra en URI. Du kan starte med at skrive en testcase for at kontrollere, at funktionen udfører den forventede funktion korrekt:
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")
)
Der kan skrives flere test for at sikre, at funktionen håndterer kantcases korrekt.
En tidlig version af funktionen kan bestå nogle, men ikke alle test:
Uri.GetHost = (url) =>
let
parts = Uri.Parts(url)
in
parts[Scheme] & "://" & parts[Host]
Den endelige version af funktionen skal bestå alle enhedstest. Dette gør det også nemt at sikre, at fremtidige opdateringer af funktionen ikke ved et uheld fjerner nogen af dens grundlæggende funktioner.