Delen via


Unittesten uitvoeren

Opmerking

Deze inhoud is van toepassing op de verouderde Power Query SDK in Visual Studio. Vandaag bevat de nieuwe Power Query SDK in Visual Studio Code een compleet uitgerust testframework waarmee we u aanmoedigen om te testen en meer te leren.

Voor zowel eenvoudige als complexe connectors is het toevoegen van eenheidstests een aanbevolen procedure en wordt het ten zeerste aanbevolen.

Eenheidstests worden uitgevoerd in de context van de Power Query SDK van Visual Studio. Elke test wordt gedefinieerd als een Fact naam, een verwachte waarde en een werkelijke waarde. In de meeste gevallen is de 'werkelijke waarde' een M-expressie waarmee een deel van uw expressie wordt getest.

Overweeg een 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 veel feiten en een aantal algemene code voor het eenheidstestframework (ValueToText, Fact, Facts, ). Facts.Summarize De volgende code bevat een voorbeeldset feiten (ga naar 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 uitvoert in Visual Studio, worden alle feiten geƫvalueerd en krijgt u een visueel overzicht van de wachtwoordfrequenties:

Schermopname van de Visual Studio M-queryuitvoer met een voorbeeld van wachtwoordsnelheden.

Door eenheidstests vroeg in het ontwikkelingsproces van de connector te implementeren, kunt u de principes van testgestuurde ontwikkeling volgen. Stel dat u een functie Uri.GetHost moet schrijven 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 manier uitvoert:

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

Er kunnen meer tests worden geschreven om ervoor te zorgen dat de functie edge-aanvragen op de juiste manier afhandelt.

Een vroege versie van de functie kan enkele, maar niet alle tests doorstaan:

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

Schermopname van de Visual Studio M-queryuitvoer waarbij sommige tests mislukken.

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

Schermopname van de uitvoer van de Visual Studio M-query waarbij alle tests slagen.