Eenheidstests verwerken
Voor zowel eenvoudige als complexe connectors is het toevoegen van eenheidstests een best practice aanbevolen.
Eenheidstests worden uitgevoerd in de context van Visual Studio SDK Power Query van uw apparaat. Elke test wordt gedefinieerd als een Fact met een naam, een verwachte waarde en een werkelijke waarde. In de meeste gevallen is de 'werkelijke waarde' een M-expressie die een deel van uw expressie test.
Overweeg een zeer eenvoudige extensie die drie functies exporteert:
section Unittesting;
shared UnitTesting.ReturnsABC = () => "ABC";
shared UnitTesting.Returns123 = () => "123";
shared UnitTesting.ReturnTableWithFiveRows = () => Table.Repeat(#table({"a"},{{1}}),5);
Deze eenheidstestcode bestaat uit een aantal Feiten en een aantal algemene code voor het eenheidstest-framework ( ValueToText , Fact , , Facts Facts.Summarize ). De volgende code bevat een voorbeeldset feiten (zie UnitTesting.query.pq voor de algemene code):
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];
Als u het voorbeeld in Visual Studio, worden alle feiten geƫvalueerd en krijgt u een visueel overzicht van de wachtwoordsnelheden:

Door eenheidstests vroeg in het ontwikkelingsproces van de connector te implementeren, kunt u de principes van test-driven development. Imagine dat u een functie met de naam moet schrijven Uri.GetHost die alleen de hostgegevens van een URI retourneert. U kunt beginnen met het schrijven van een testcase om te controleren of de functie de verwachte functie op de juiste wijze uitvoert:
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")
)
Er kunnen aanvullende tests worden geschreven om ervoor te zorgen dat de functie op de juiste wijze randgevallen verwerkt.
Een vroege versie van de functie kan een aantal maar niet alle tests doorstaan:
Uri.GetHost = (url) =>
let
parts = Uri.Parts(url)
in
parts[Scheme] & "://" & parts[Host]

De uiteindelijke versie van de functie moet alle eenheidstests doorstaan. Dit maakt het ook eenvoudig om ervoor te zorgen dat toekomstige updates voor de functie niet per ongeluk een van de basisfunctionaliteiten verwijderen.
