Bemærk
Adgang til denne side kræver godkendelse. Du kan prøve at logge på eller ændre mapper.
Adgang til denne side kræver godkendelse. Du kan prøve at ændre mapper.
Notat
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 teststruktur med alle funktioner, som vi opfordrer dig til at teste og få mere at vide.
For både enkle og komplekse konnektorer er tilføjelse af enhedstest en bedste praksis og anbefales stærkt.
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 er den "faktiske værdi" et M-udtryk, der tester en del af dit udtryk.
Overvej en 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 enhedstestrammen (ValueToText, Fact, Facts, Facts.Summarize). Følgende kode indeholder et eksempel på et sæt fakta (gå til UnitTesting.query.pq for at få den almindelige 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 får en visuel oversigt over gennemsynsprocenterne:
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, der kaldes 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 tests for at sikre, at funktionen håndterer kantsager 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. Denne version gør det også nemt at sikre, at fremtidige opdateringer til funktionen ikke ved et uheld fjerner nogen af dens grundlæggende funktioner.